1.sed基本命令格式bash
sed options script file
sed 命令选项app
选项 | 描述 |
-e script | 在处理输入时,将script中指定的命令加载到运行命令中 |
-f file | 在处理输入时,将file文件中指定的命令加载到运行命令中 |
-n | 不要为每一个命令生成输出,等待print命令来输出 |
2.sed选项编辑器
2.1替换选项sthis
基本格式:s/para1/para2/ s命令会用斜线间隔文本字符串,第二个代替第一个 通常只替换掉一行中匹配的第一个文本字符串spa
1.处理一行文本 $echo "this is a test test" | sed 's/test/exam/' this is a exam test 2.处理一个文件中的多行文本 $cat data1 this is a test this is a test this is a test $sed 's/test/exam/' data1 this is a exam this is a exam this is a exam 3.使用多个编辑命令 $sed -e 's/this/that/; s/test/exam/' data1 #用;号隔开,前一个命令末尾和分好之间不能有空格 that is a exam that is a exam that is a exam 也能够改成 $sed -e ' >s/this/that/ >s/test/exam/' data1 #引号开始引号结束 that is a exam that is a exam that is a exam 4.从文件中读取编辑命令 $cat script1 s/this/that/ s/test/exam/ $ sed -f script1 data1 that is a exam that is a exam that is a exam
用替换标记flag的格式: s/pattern/replacement/flagsssr
flags有4种:3d
遇到特殊字符,特殊处理!code
$sed 's/\/bin\/bash/\bin\/dash' /etc/passwd #用!代替/以后的命令:容易读取和理解,注意最后一个! $$sed 's!/bin/bash!bin/dash!' /etc/passwd
2.2使用地址ip
默认状况下,sed编辑器中的命令会做用于全部行,若想只做用于特定某行或某些行,必须用行寻址ci
sed编辑器的2中行寻址
命令格式: address command 也能够多行
address { command1 command2 command3 }
举栗子
$cat data2 You are a girl 1 I am a girl 2 I am a girl 3 I am a girl 4 #替换一行 $sed '2s/girl/boy/' data2 You are a girl 1 I am a boy 2 I am a girl 3 I am a girl 4 #替换多行用逗号分隔 $sed '2,3s/girl/boy/' data2 You are a girl 1 I am a boy 2 I am a boy 3 I am a girl 4 #替换到最后一行用$命令 $sed '2,$s/girl/boy/' data2 You are a girl 1 I am a boy 2 I am a boy 3 I am a boy 4 #文本匹配 $sed '/You/s/girl/boy/' data2 You are a boy 1 I am a girl 2 I am a girl 3 I am a girl 4 #组合命令 $sed '2{ >s/I/You/ >s/am/are/ >s/girl/boy/ >}' data2 You are a boy 1 You are a boy 2 I am a girl 3 I am a girl 4
2.3删除行命令d
sed编辑器不会修改原始文件,删除的行只是从sed编辑器的输出中消失了。
#删除一行 $sed '3d' data2 #删除第2行 You are a girl 1 I am a girl 3 I am a girl 4 $sed '2,3d' data2 #删除第2.3行 $sed '3,$d' data2 #删除第3到最后行 $sed '/You/d' data2 #删除You所在行 #注意,删除用两个文本模式来匹配的行时,第一个匹配模式打开删除功能,第二个匹配模式关闭删除功能,两个匹配模式之间的行都会被删 $sed '/1/,/3/d' data2 I am a girl 4
2.4插入i和附加a文本命令
$sed '3i\you are a dog' data2 #\去掉后,执行结果同样,为阅读方便,加\ You are a boy 1 I am a girl 2 you are a dog I am a girl 3 I am a girl 4 $sed '3a\you are a dog' data2 You are a boy 1 I am a girl 2 I am a girl 3 you are a dog I am a girl 4
2.5修改行C
与插入和附加相似,修改数据流中的整行文本。
$sed '3c\you are a dog' data2 #\去掉后,执行结果同样,为阅读方便,加\ You are a boy 1 I am a girl 2 you are a dog I am a girl 4 $sed '2,3c\you are a dog' data2 #将2个匹配模式之间的行换成要替换的文本。 You are a boy 1 you are a dog I am a girl 4
2.6转换命令y
转换命令y是惟一能够处理单个字符的sed编辑器命令,
格式: addressy/inchars/outchars/ 其中inchars和outchars值一对一映射,inchars中第一个地府转换成outchars中第一个字符,以此类推
$sed 'y/123/678/' data2 #\去掉后,执行结果同样,为阅读方便,加\ You are a boy 6 I am a girl 7 I am a girl 8 I am a girl 4
y转换命令是一个全局命令,它会自动转换文本中找到的全部匹配值,没法限定只更改该字符出现的某个地方
$echo "this 1 is a test 1" | sed 'y/123/456/' this 4 is a test 4
2.7打印命令p = l
$sed '=' data2 #\去掉后,执行结果同样,为阅读方便,加\ 1 You are a boy 1 2 I am a girl 2 3 I am a girl 3 4 I am a girl 4 $sed -n 'l' data2 #会打印出本句结束符$ You are a boy 1$ I am a girl 2$ I am a girl 3$ I am a girl 4$
2.8 sed与文件一块儿工做写w读r
格式:addressw filename filename文件必须有写的权限
addressr filename filename文件必须有读的权限
$sed -n '2,3w test' data2 $cat test I am a girl 2 I am a girl 3 $sed '3r test' data2 You are a girl 1 I am a girl 2 I am a girl 3 I am a girl 2 #注意这里是从test读出来的 I am a girl 3 I am a girl 4
文件读文件的命令r filename 能够与删除命令d一块儿使用,替换占用文本
$ cat letter There are those people: LIST will come to school. $ sed '/LIST/{ #data3中存放着3行数据分别为John May Shliy >r data3 #注意:r和d不能交换位置,不然不成功 >d >}' letter There are those people: John May Shliy will come to school.