sed命令笔记
在linux中通常要进行文本处理,sed是一个非常强大的文本处理命令工具。 配合正则表达式可以进行文本搜索、替换、插入、删除等操作。 sed基本上就是正则模式匹配,所以你的正则表达式要比较强才能玩的好它。
sed是一种新型的,非交互式的编辑器。它能执行与编辑器vi和ex相同的编辑任务。 sed编辑器没有提供交互使用方式,使用者只能在命令行输入编辑命令、指定文件名,然后在屏幕上查看输出。 sed编辑器没有破坏性,它不会修改文件,除非指定-i选项,默认情况下,所有的输出行都被打印到屏幕上。
这里只介绍最常用的一些用法,如果要看sed全部东西, 请参考sed参考手册
正则式
介绍一下正则表达式的一些最基本的东西:
^
表示一行的开头。如:/^#/ 以#开头的匹配。$
表示一行的结尾。如:/}$/ 以}结尾的匹配。\<
表示词首。 如 <abc 表示以 abc 为首的詞。\>
表示词尾。 如 abc> 表示以 abc 結尾的詞。.
表示任何单个字符。*
表示某个字符出现了0次或多次。[ ]
字符集合。 如:[abc]表示匹配a或b或c,还有[a-zA-Z]表示匹配所有的26个字符。如果其中有^表示反,如[^a]表示非a的字符
s命令替换
1 | sed "s/my/your/g" test.txt # 将my全部修改成your |
执行多次匹配
1 | # 第1到第3行的my换成your,从第3行开始This换成That |
我们可以使用&来当做被匹配的变量,然后可以在被匹配项的两边加中括号:
1 | sed 's/my/[&]/g' my.txt |
分组匹配
和python类似,使用括号来进行分组,后面可以通过\1,\2来引用分组:
1 | sed 's/This is my \([^,]*\),.*is \(.*\)/\1:\2/g' my.txt |
a和i命令添加行
a命令就是append后面一行添加,i命令就是insert前面一行插入,它们是用来添加行的。如
1 | # 第1行前插入 |
c命令替换行
c 命令是替换匹配行:
1 | sed "/fish/c qqqqqqqqqqqqqqqqqqqqqqqq" my.txt |
d命令删除行
1 | sed -i '/fish/d' my.txt |
p命令打印
你可以把这个命令当成grep式的命令:
1 | sed -n '/fish/p' my.txt |
sed更多范例
1 | sed '/north/p' datafile # 命令p是打印命令,默认情况下是打印所有输入行;选项-n是用于取消默认的打印操作。 |