代码只是为了学习和理解sed命令而为之,并不代表问题的唯一解或最佳解
一、替换
1.神奇变换(y命令的使用)
sed 'y/ori_letter_list/target_letter_list/' filename
cat filename
1234567890
2345678901
3456789012
4567890123
测试
将文件中1换成A
将文件中2换成B
...
将文件中0换成J
sed 'y/1234567890/ABCDEFGHIJ/' filename
ABCDEFGHIJ
BCDEFGHIJA
CDEFGHIJAB
DEFGHIJABC
注意变换关系是按两个list的位置对应变换,y是一个全局命令,拒绝使用后缀flag/g
list1:1234567890
list2:ABCDEFGHIJ
下面再作一个与前例相反的变换
sed 'y/0987654321/ABCDEFGHIJ/' filename
JIHGFEDCBA
IHGFEDCBAJ
HGFEDCBAJI
GFEDCBAJIH
2.替换每行第一个匹配
sed 's/regexpr/anyword/' filename
sed 's/regexpr/anyword/1' filename
举例:
cat filename
1234567890 2345678901
3456789012 4567890123
sed 's/5/五/' filename
1234五67890 2345678901
34五6789012 4567890123
3.替换每行第n(如果有的话)个匹配
sed "s/regexpr/anyword/${n}" filename
cat filename
111111111111111111
222222222222222222
333333333333333333
444444444444444444
举例:
sed "s/4/ 四 /8" filename
111111111111111111
222222222222222222
333333333333333333
4444444 四 4444444444
4.替换每行所有匹配
cat filename
1234567890 2345678901
3456789012 4567890123
举例:
sed 's/3/三/g' filename
12三4567890 2三45678901
三456789012 456789012三
二、行号处理
1.为文件加行号
sed = filename|sed 'N;s/\n/:/'
cat filename
111111111111111111
222222222222222222
333333333333333333
444444444444444444
举例:
sed = filename|sed 'N;s/\n/:/' filename
1:111111111111111111
2:222222222222222222
3:333333333333333333
4:444444444444444444
2.仅为文件中的正文行加行号
sed /./= a|sed '/./N;s/\n/:/'
举例:
cat filename
111111111111111111
222222222222222222
333333333333333333
444444444444444444
sed /./= a|sed '/./N;s/\n/:/' filename
1:111111111111111111
3:222222222222222222
4:333333333333333333
6:444444444444444444
三.字串翻转
sed '/\n/!G;s/\(.\)\(.*\n\)/&\2\1/;//D;s/.//'
举例:
echo 1234567890|sed '/\n/!G;s/\(.\)\(.*\n\)/&\2\1/;//D;s/.//'
0987654321
四、选择性输出
1.打印文档奇数行(隔行输出)
sed 'n;d'
sed 'x;$!N;x'
sed -n 'p;n'
1
3
5
7
2.打印偶数行(隔行输出)
sed -n 'n;p'
sed '1d;n;d;'
2
4
6
8
3.删除连续重复行(大量使用了pattern space 文件太大时要注意)
sed '$!N; /^\(.*\)\n\1$/!P; D'
#使用 $!N 要当心内存溢出
举例:
cat file
111111111111111111
222222222222222222
222222222222222222
333333333333333333
444444444444444444
444444444444444444
444444444444444444
444444444444444444
444444444444444444
sed '$!N; /^\(.*\)\n\1$/!P; D' filename
111111111111111111
222222222222222222
333333333333333333
444444444444444444
4.合并上下行并以空格相分隔
sed '$!N;s/\n/ /'
举例:
cat file
1234567890
0987654321
执行命令后:
1234567890 0987654321
5.将以\符号结尾的行与下行合并并以空格分隔(拼接断行)
sed -e :a -e '/\\$/N; s/\\\n/ /; ta'
举例:
cat filename
1 111111111111111111\
2 222222222222222222
3 333333333333333333\
4 444444444444444444
sed -e :a -e '/\\$/N; s/\\\n/ /; ta' filename
1 111111111111111111 2 222222222222222222
3 333333333333333333 4 444444444444444444
6.按关键字拼接行
如果某行以=开始,则合并到上一行并替代=为空格
sed -e :a -e '$!N;s/\n=/ /;ta' -e 'P;D'
举例:
cat file
111111111111111111
222222222222222222
=333333333333333333
444444444444444444
sed -e :a -e '$!N;s/\n=/ /;ta' -e 'P;D' filename
111111111111111111
222222222222222222 333333333333333333
444444444444444444
7.输出匹配行的下一行
sed -n '/regexpr/{n;p;}' filename
举例:
cat filename
1 111111111111111111
2 222222222222222222
3 333333333333333333
4 444444444444444444
sed -n '/^3/{n;p;}' filename
4 444444444444444444
8.显示匹配行的行号并输出匹配行的上行、匹配行、下行
sed -n -e '/regexpr/{=;x;1!p;g;$!N;p;D;}' -e h
举例:
cat filename
1 111111111111111111
2 222222222222222222
3 333333333333333333
4 444444444444444444
sed -n -e '/^3/{=;x;1!p;g;$!N;p;D;}' -e h filename
3 #匹配行的行号
2 222222222222222222 #上一行
3 333333333333333333 #匹配行
4 444444444444444444 #下一行
9.删除文档中某标志区域内的关键字匹配行
删除文档中从being开到end结束的块中包含myword的行
sed '/^begin/,/^end/{/myword/d;}' filename
cat filename
myword
begin
myword
Number!
myword
Number!
myword
Number!
myword
Number!
end
myword
Number!
测试:
myword
begin
Number!
Number!
Number!
Number!
end
myword
Number!
五、字串解析
1.从字串中解析出两个子串(前2各字符和后9个字符)
echo "WeLoveChinaUnix"|sed -e 'H;s/\(..\).*/\1/;x;s/.*\(.\{9\}\)$/\1/;x;G;s/\n/ /'
We ChinaUnix
2.分解日期串
echo 20030922|sed 's/\(....\)\(..\)\(..\)/\1 \2 \3/'|read year month day
echo $year $month $day
2003 09 22
label 以及相关的 t 和 b 的用法
先说说b吧:
比如有文件如下:
cat filename
a1234567890
1234567890
1234567890a
1234567890
123456a7890
先要求将其中的"5"替换成" 伍十万 ",但当该行包含字母"a"时,"5"就要替换成" 叁佰万 ".
现看如何通过b来实现:
cat filename.sed
#!/bin/sed -f
/a/b 5t #如果当前行包含字母"a"则转到label"5t"处
s/5/ 五十万 /g #将5替换成" 五十万 "
b #未指明跳转位置时,跳到Script的尾部
:5t #设置名称为"5t"的label
s/5/ 叁佰万 /g #提换5为" 叁佰万 "
测试:
sed -f filename.sed filename
1234 五十万 67890
a1234 叁佰万 67890
1234 五十万 67890
1234 叁佰万 67890a
1234 五十万 67890
1234 叁佰万 6a7890
当然,这只是为了说明sed中b的用法,不代表此类问题的最佳解决途径。
!G !N是什么意思?
!:逻辑非
D:删除模式空间第一个回车符前的所有
N:追加下一行到模式空间。
!D:不执行D。
$!D:只有到最后行(文件末尾行)时不执行D。
分享到:
相关推荐
### Linux Shell Sed 学习笔记:深入理解与实践 #### Sed 概览 Sed(Stream Editor)是一种功能强大的文本处理工具,适用于Unix/Linux环境下的流编辑操作。它能够读取输入流(如文件或标准输入),进行模式匹配、...
### Sed学习笔记详解 #### 1. Sed简介 Sed(Stream Editor)是一种强大的文本处理工具,主要用于在线编辑文本文件。它能够一次性处理文件中的一行内容,将每一行存储在一个临时区域,即“模式空间”(Pattern ...
Sed学习笔记,介绍所有sed命令,和具体用法
sed与awk(第二版)学习笔记
### sed 高级用法详解 #### 一、sed简介 **sed**(Stream EDitor)是一种强大的文本处理工具,主要用于自动化地对文本文件进行编辑。它以行为单位处理文本,适用于以下几种情况: 1. **处理大型文件**:对于那些不...
sed awk 学习笔记 SED 是一个“非交互式”的面向字符流的编辑器,它可以在一个地方指定所有的编辑指令,然后通过文件传递一次来执行他们。但是它在每次多于一行的处理能力方面有限制。SED 的优点是可以批量处理文件...
"Sed学习笔记.htm"涵盖了流编辑器Sed的用法,Sed是Unix系统中用于文本处理的强大工具,可以实现查找、替换、删除等功能,常用于批量处理文件。"UNIX.Shell编程24学时教程.[it270.com].pdf"可能是更全面的教程,包括...
根据老男孩老师视频教程《Linux正则表达式实战》的精彩讲解,进行了学习笔记记录,主要讲解Linux三剑客中的grep用法、捎带sed的讲解笔记。 学习笔记进行了规整,相信Linux运维工作者能够一目了然笔记的内容。 (1...
学习linux的笔记,发到博文了,鉴于文档方便保存和查阅,发出来,免费的哈 博文来自http://blog.csdn.net/wklken,共12篇,类似手册,可快速练习和查阅,容易上手 文档列表: Linux笔记——vim常用操作及扩展补充...
这份"超详细的Linux学习笔记"涵盖了Linux运维管理的多个重要方面,包括DNS(Domain Name System)、Samba、Apache、Sendmail以及常用的Linux命令。让我们逐一探讨这些知识点。 首先,DNS是互联网上的名称解析服务,...
以上就是Linux系统中一些常用命令的学习笔记。每个命令后面通常可以跟上不同的选项和参数,来满足不同的需求。掌握这些命令,对于Linux系统的日常运维工作至关重要。随着时间的推移,建议持续学习和实践,不断提高对...
本资源是 Shell 学习笔记的总结,涵盖了 Shell 的基本概念、类型、变量、进程、权限、管道、POSIX、grep、sed、awk 等命令和编程语言。 一、 Shell 的类型和特点 Shell 是一种命令行界面,提供了访问操作系统的...
压缩包内的`sed命令使用.docx`、`Sed命令学习笔记.pdf`、`sed使用手册.pdf`都是非常好的学习资料,它们将更深入地讲解sed命令的高级用法,包括模式匹配的细节、流编辑的技巧以及在实际工作中的应用案例。通过阅读...
这篇Linux学习笔记涵盖了Linux的基础知识,包括C和C++编程环境,是初学者深入了解Linux的宝贵资源。 首先,让我们来探讨Linux的常用命令。在Linux的世界里,一切皆文件,包括硬件设备。掌握基本的命令行操作是至关...
【Unix C学习笔记汇总】 Unix操作系统是计算机科学领域的一个经典之作,它以其高效、稳定和强大的编程环境闻名。C语言则是Unix系统的核心编程语言,它简洁、高效且具有丰富的库支持,是编写系统级程序的理想选择。...
同时,`XML学习笔记.txt`虽然不是直接关于UNIX,但XML是数据交换和文档存储的标准格式,理解XML有助于处理与UNIX相关的数据。 通过系统学习这些笔记,你将能够熟练地在UNIX环境中工作,无论是日常开发还是系统维护...
第7章 sed、gawk介绍与正则表达式 120 7.1 sed编辑器 120 7.1.1 在命令行中定义编辑器命令 120 7.1.2 在命令行中使用多个编辑器命令 121 7.1.3 从文件读取编辑器命令 121 7.2 gawk程序 122 7.2.1 gawk命令格式 122 ...
这份"perl的学习笔记1"很可能是作者在深入学习Perl过程中积累的宝贵资料,包括他自己编写的小程序和学习心得。 首先,Perl语言的核心特性是其灵活性和适应性。它的语法混合了C、sed、awk等语言的特点,使得它既适合...