背景:突然想到Linux那本书还有个尾巴没结。唉,自己都不知道怎么想起来的,这两天就先把剩下的一百来页看完吧。
相关sed的一些基本使用做了一个小记,写出来加深一下印象。
一、 sed 替换
s/pattern/replacement/flags
flags 有以下四种取值:
①数字,表示 replacement 将替换 第几处 pattern
②g, 表示 replacement 将会替换所有匹配到的文本 pattern
③p, 表示 原先行的内容要打印出来
sed -n ‘s/test1/test2/p’ test.txt, -n 会禁止sed输出,但是后面的 p 则会输出修改过的行。最终的效果就是只输出被替换命令修改过的行。
④w file,将替换的结果写到文件中 w 后面直接空格然后跟上 要写入的文件名即可。
需要注意的是有的时候被替换的又可能是 带有斜杠 ‘/’ 的路径名,这样的话,我们通常需要使用反斜杠 ‘\’ 来转义。
比如: sed ‘s/\/bin\/bash/\/bin\/csh/’ /etc/passwd
这个写可能有的人觉得开心,但是有一种更开心的写法,
sed ‘s!/bin/bash!/bin/csh!’ /etc/passwd 其中的叹号可以被替换成其他字符,因为sed 编辑器支持选择其他字符作为替换命令的字符串分隔符。
按行匹配
比如 :sed ‘2s/test1/test2/’ test.txt 会替换掉test.txt第二行中的test1
sed ‘2,4s/test1/test2/’ test.txt’ 替换掉 2到4行的test1
sed ‘2,$s/test1/test2/’ test.txt’ 替换掉 2行以后的test1
文本匹配
和按行匹配类似
命令组合
比如: sed ‘2{
s/test1/test2/
s/tt1/tt2/
}’ test.txt
意思就是 替换第二行 中的 test1 为test2 tt1 为tt2 ,和前面的只不过多写了一点,没什么大区别。
二、 sed 删除
删除命令在匹配方面和替换类似,不过这是删除,所以是下面这样,
sed ‘d’ test.txt
sed ‘2d’ test.txt 还有其他的匹配参照 替换 即可明白。
三、插入和附加
这一对小兄弟,insert 命令 i 在指定的行前添加
append 命令 a 在指定的行后添加
比如:echo Test Line 2’ | sed ‘i\Test Line 1’
会输出: Test Line 1
Test Line 2
另外,附加到最后一行,可以使用 a$ ,插入多行,行与行之间使用反斜杠隔开。
四、修改
change 命令 c ,修改一行,只会修改一行。不信可以试试。我是老实人,只会说大实话。?
五、转换
transform 命令 y ,这个是唯一一个可以处理单个字符的命令
[address]y/inserts/outchars/ ,它会进行一一匹配,举个例子
sed ‘y/123/456’ test.txt 结果就是1 对应着4 ,2对应着5,3对应着6,这个命令我觉得有个弊端,就是它是全局命令,我们无法限制它之替换特定位置的字符。
六、 对文件操作
写入文件
[address]w filename
sed ‘1,3w test.txt’ test2.txt
读取文件
[address]r filename
sed ‘3r test.txt’ test2.txt
注意:读取文件如果使用 地址区间 那么只能使用单独一个行号或者文本模式。写入文件就比较灵活了。
好了,最后来一张美图。