初识sed和gawk(二)
更多的替换选项
之前学习到/s
为替换文本,现在来详细研究该命令的使用方法
- 替换标记
- 默认这个标记只会替换每行出现的第一处,要让替换命令能够替换一行中的不同地方出现的文本需要使用到
替换标记
,具体格式如下:s/pattern/replacement/flags
,有四种替换的标记: - 数字,表明新文本将替换第几处匹配的地方
sed 's/test/trial/2' data4.txt
- g,表明新文本将会替换掉所有匹配到的文本
sed 's/test/trial/g' data4.txt
- p,表明原先行的内容要打印出来
sed -n 's/test/trial/p' data5.txt
. -n的意思是进制sed输出,但是p会将原先行的内容打印出来,配合的效果就是只输出了修改过的行 - w file,将替换到的结果写到文件中去
sed 's/test/trial/w test.txt' data5.tx
,输出会保存到test.txt文件中去
- 默认这个标记只会替换每行出现的第一处,要让替换命令能够替换一行中的不同地方出现的文本需要使用到
使用地址
默认情况下sed使用的命令会作用到所有行上,如果想单独作用在某行或者某几行,就需要使用到行寻址
行寻址有两种形式:
- 以数字形式表示行区间
- 用文本模式来过滤出行
格式为:[address] command`或
address{command1 command2}
举个例子
数字方式的行寻址
sed '2s/dog/cat/' data.txt
即只修改了第二行的数据sed '2,3s/dog/cat/' data.txt
行地址区间sed '2,$s/dog/cat/' data.txt
意思是从第二行开始的所有行
使用文本模式过滤器
sed编辑器允许指定命令来过滤要作用的行,使用下面格式:
/pattern/command
sed '/harper/s/bash/csh' /etc/passwd
意思是你只修改harper用户的行
删除行
删除行命令是d
,这个需要格外的小心,如果你忘了加寻址模式的话,文本所有行都会被删除
- 几个例子
sed '3d' data.txt
删除第三行的数据sed '3,$d' data.txt
删除第三行后面的所有数据
插入和附加文本
- 插入命令
i
会在指定行前增加一个新行(insert) - 附加命令
a
会在指定行后增加一个新行(append) - 命令格式:``sed ‘[address] command\ new line’
echo "text line 2" | sed 'i\text line 1'
意思是在line2前会出现一个line1sed '3i\this is a new world' data.txt
在第三行前加一句话
修改行
- 修改
c
(change)
转换命令
转换命令(transform)y
是一个可以处理单个字符的命令,格式是:[address]y/inchars/outchars
sed 'y/123/456/' data.txt
意思是将1转换为4,2转换为5.3转换为6.长度不同则会报错
其他命令
echo "this is a test" | sed 'p'
p
命令用来打印文本[address] w filename
w
命令用来写文件sed '1,2w test.txt' data.txt
将data.txt中的前两行写到text.txt中区[address] r filename
r
命令用来读取文件sed '3r data.txt' data2.txt
将data.txt 读到data2.txt的第三行后面去