-
Notifications
You must be signed in to change notification settings - Fork 0
Linux sed
harryfyodor edited this page Jul 21, 2017
·
8 revisions
sed是stream editor的简称,即流编辑器。一般来说是用来处理文本的。在使用的过程中会使用到大量的正则表达式。
本文会参考众多网上sed的教程,做一个记录和整合,当做自己今后的备忘录。
主要参考的教程如下所示:
- 存在一个
pattern space的空间,可以想象成一个暂存的空间。 - 匹配是一行一行匹配的,事实上是对行进行匹配或操作。
-
-e用选项中指定的script来处理,可以指定多个脚本 -
-f用选项中制定的script文件来处理 -
-i直接修改源文件 -
-n不把pattern space的内容打印出来
s命令用于匹配。下面是常用的格式。
范围s/要匹配的字符串或者正则/要用于替换的字符串/模式
- 范围:匹配的行的范围。默认全部,
3,6则表示第三行到第六行。 - 要匹配的字符串或者正则:匹配的部分,而如果使用
s命令,则是后面需要被替换的部分 - 要用于替换的字符串
- 模式:常用模式是
g,即全部匹配。如果是1,则表示匹配第一个。3g则表示从第三行开始到最后。
例子:
sed "3,6s/my/your/g" pets.txt
-
^表示以什么开头。 -
$表示以什么结尾。 -
\<和\>表示以什么开头或者结尾的词。<\abc\>即严格匹配abc。 -
.任何单个字符。 -
*出现0次或者多次。 -
\+出现1次或者多次。 -
\{m,n\}匹配前面符号出现m次到n次的词。 -
[^]指定不存在。
指定多个匹配方式,连续操作。
sed -e '1,3s/my/your/g' -e '3,$s/This/That/g' my.txt
圆括号匹配一般是为了修改格式。在后面的用于替换的字符串中可以使用\1之类的来代替前面括号匹配到的东西。
sed 's/This is my \([^,&]*\)\./\1/g' my.txt
其他命令有多种使用的方式。主要针对下面从a到p命令来说,可以有如下的使用方式:
-
操作的行数 命令 内容,具体例子sed "1 i This is my monkey" my.txt。 -
/匹配的字符串/命令 内容,具体例子sed "/fish/a This is my monkey" my.txt。 下面就介绍每一种命令的具体功能。 - N命令
要记住sed匹配的单位是行。而N命令则可以把计数行和偶数行用\n结合起来,共同匹配。
sed 'N;s/my/your/' pets.txt
-
a命令:append插入后面。 -
i命令:insert插入前面。 -
c命令:替换匹配行。 -
d命令:删除匹配行。 -
p命令:打印匹配行。
打包命令颇有一种逻辑操作的感觉,所以下面用逻辑操作的角度来说一下:
- 与操作。两个匹配方式都需要满足才能起作用。
sed '3,6 {/This/{/fish/d}}' pets.txt
- 或操作。两个匹配方式满足一个就可以操作。
sed '1,${/This/d;s/^ *//g}' pets.txt
熟练使用sed的Pattern Space可以实现很多很神奇的功能。比如翻转行等等。由于目前本人用得不多,所以这里不加赘述。感兴趣可以看看上面酷壳的教程。