Linux中使用sed命令替换字符串

sed命令的选项

sed [选项] [动作]

选项与参数:
-n :使用安静(silent)模式。在一般 sed 的用法中,所有来自 STDIN 的数据一般都会被列出到终端上。但如果加上 -n 参数后,则只有经过sed 特殊处理的那一行(或者动作)才会被列出来。
-e :直接在命令列模式上进行 sed 的动作编辑;
-f :直接将 sed 的动作写在一个文件内, -f filename 则可以运行 filename 内的 sed 动作;
-r :sed 的动作支持的是延伸型正规表示法的语法。(默认是基础正规表示法语法)
-i :直接修改读取的文件内容,而不是输出到终端。

function:
a :新增行, a 的后面可以是字串,而这些字串会在新的一行出现(目前的下一行)
c :取代行, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行
d :删除行,因为是删除,所以 d 后面通常不接任何参数,直接删除地址表示的行;
i :插入行, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行);
p :列印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行
s :替换,可以直接进行替换的工作,通常这个 s 的动作可以搭配正规表示法,例如 1,20s/old/new/g 一般是替换符合条件的字符串而不是整行

一般function的前面会有一个地址的限制,例如 [地址]function,表示我们的动作要操作的行。下面我们通过具体的例子直观的看看sed的使用方法。

sed元字符集

^ 			匹配行开始,如:/^sed/匹配所有以sed开头的行。
$ 			匹配行结束,如:/sed$/匹配所有以sed结尾的行。
. 			匹配一个非换行符的任意字符,如:/s.d/匹配s后接一个任意字符,最后是d。
* 			匹配0个或多个字符,如:/*sed/匹配所有模板是一个或多个空格后紧跟sed的行。
[]			匹配一个指定范围内的字符,如/[ss]ed/匹配sed和Sed。  
[^] 		匹配一个不在指定范围内的字符,如:/[^A-RT-Z]ed/匹配不包含A-R和T-Z的一个字母开头,紧跟ed的行。
\(..\) 		匹配子串,保存匹配的字符,如s/\(love\)able/\1rs,loveable被替换成lovers。
& 			保存搜索字符用来替换其他字符,如s/love/**&**/,love这成**love**。
\< 			匹配单词的开始,如:/\ 			匹配单词的结束,如/love\>/匹配包含以love结尾的单词的行。
x\{m\} 		重复字符x,m次,如:/0\{5\}/匹配包含5个0的行。
x\{m,\}		重复字符x,至少m次,如:/0\{5,\}/匹配至少有5个0的行。
x\{m,n\} 	重复字符x,至少m次,不多于n次,如:/0\{5,10\}/匹配5~10个0的行。

文本替换:

sed 's#原字符串#新字符串#g'  file
      s     单独使用→将每一行中第一处匹配的字符串进行替换
      g     每一行进行全部替换→sed指令s的替换标志之一(全局替换)
sed -i 's/原字符串/替换字符串/g' filename		####替换文件中的所有匹配项
sed 's/^/添加的头部&/g'						####在所有行首添加
sed 's/$/&添加的尾部/g'						####在所有行末添加
sed '2s/原字符串/替换字符串/g'					####替换第2行
sed '$s/原字符串/替换字符串/g'					####替换最后一行
sed '2,5s/原字符串/替换字符串/g'				####替换2到5行
sed '2,$s/原字符串/替换字符串/g'				####替换2到最后一行
sed 's/^/添加的头部&/g;s/$/&添加的尾部/g'		####同时执行两个替换规则,中间加分号
[root@ljc ~]# sed -n '/^$/p' liangjc.txt 		打印空行
[root@ljc ~]# sed '/^$/d' liangjc.txt   		删除空行,未真正删除,与-i参数一起使用才真正删除内容
[root@ljc ~]# sed '13,$d' liangjc.txt			删除第13到末尾的行

sed取区间范围:

[root@ljc ~]# sed -n '1,3p' liangjc.txt 					取1到3行
[root@ljc ~]# sed -n  '/112/p' liangjc.txt 					取匹配112的行
[root@ljc ~]# sed -n '13,$'p liangjc.txt 					取第13行到末行之间的内容

选项 -e:允许在同一行里执行多条命令:

1到2行删除,并全局将1替换为2
[root@ljc ~]# sed -e '1,2d' -e 's/1/2/g' liangjc.txt 

打印奇数行:

[root@ljc ~]# sed -n '1~2p' liangjc.txt 

打印偶数行:

[root@ljc ~]# sed -n '2~2p' liangjc.txt 

追加内容

Linux中使用sed命令替换字符串_第1张图片

在以1开头行的后面插入test
[root@ljc ~]# sed '/^1/a\test' liangjc.txt 
root::0:0:root:/root:/bin/bash
bin::1:1:bin:/bin:/sbin/nologin
1
test
2}
i 插入insert,在指定行前添加一行或多行文本

Linux中使用sed命令替换字符串_第2张图片

将 hello world 追加到以test开头的行前面:
[root@ljc ~]#  sed '/^this/i\hello world ' file

Linux中使用sed命令替换字符串_第3张图片

在t1.txt文件第1行之前插入test:
[root@ljc ~]# sed -i '1i\test' t1.txt

Linux中使用sed命令替换字符串_第4张图片

你可能感兴趣的:(Linux中使用sed命令替换字符串)