sed:输入流编辑器
Posted 小小超
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sed:输入流编辑器相关的知识,希望对你有一定的参考价值。
1、命令格式
sed [OPTION]... script-only-if-no-other-script [input-file]...
选项 | 内容 |
---|---|
-n | 只打印模式匹配的行 |
-e script | 将脚本添加到要执行的命令中。直接在命令行模式上进行sed的动作编辑。 |
-f script-file | 将脚本文件的内容添加到要执行的命令中。直接将sed的动作写在一个文件内,-f filename则可以执行filename内的sed动作。 |
--follow-symlinks | 当处理到位时,遵循符号链接;硬链接仍然会中断。 |
-i[SUFFIX] | 直接修改文件内容 |
-c | 在-i模式下移动文件时使用copy而不是rename。 |
-l N | 为“l”命令指定所需的行换行长度 |
--posix | 禁用所有GNU扩展。 |
-r | 在脚本中使用扩展正则表达式。(默认是基础正则表达式) |
-s | 将文件视为单独的而不是单个连续的长流。 |
-u | 从输入文件中加载最小数量的数据,并更频繁地刷新输出缓冲区 |
--help | 显示此帮助并退出 |
--version | 输出版本信息并退出 |
常用命令 | |
---|---|
= | 打印当前行号。 |
a \\ | 新增,a的后面可以接字符串,而这些字符串会在新的一行出现(目前的下一行) |
i \\ | 插入,i的后面可以接字符串,而这些字符串会在新的一行出现(目前的上一行) |
q | 立即退出sed脚本,不再处理任何输入,除非自动打印未禁用,否则将打印当前模式空间。 |
Q | 立即退出sed脚本,不再处理任何输入。 |
r filename | 附加从文件名读取的文本。 |
R filename | 附加从文件名中读取的行。该命令的每次调用都从文件中读取一行。 |
开始一个命令块(以一个结束)。 | |
b label | 分支到脚本中带有标记的地方,如果分支不存在则分支到脚本的末尾; |
t label | 如果s///在最后一行输入被读取之后,并且在最后一个t或t命令之后,已经成功地进行了替换,那么转移到label;如果标签被省略,分支到脚本的结尾。 |
T label | 如果从最后一行输入和最后一个T或t命令开始,没有s///进行成功的替换,则转移到label;如果标签被省略,分支到脚本的结尾。 |
c \\ | 将选定的行替换为文本,其中每个文本都嵌入了换行符,换行符前面有一个反斜杠。 |
d | 删除,删除选择的行; |
D | 删除模式空间中第一个内嵌的换行。 |
h/H | 复制/追加模式空间以容纳空间。 |
g/G | 复制/附加保持空间到模式空间。 |
x | 交换hold和模式空间的内容。 |
l | 以“清晰可见”的形式列出当前行。 |
l width | 以“视觉上无歧义”的形式列出当前行,并在宽度字符处断开。 |
n/N | 将下一行输入读入/追加到模式空间。 |
p | 打印当前模式空间。打印,也就是将某个选择的数据打印出来,通常会和sed -n一起运行。 |
P | 打印到当前模式空间的第一个内嵌换行。 |
s/正则表达式/更换/ | 替换,可以直接进行替换工作。通常这个s的动作可以搭配正则表达式!例如1,20s/old/new/g |
w filename | 写并追加模板块到file末尾; |
W filename | 写并追加模板块的第一行到file末尾; |
y/source/dest/ | 将源文件中出现的模式空间中的字符转换为dest中相应的字符。 |
sed -f b.txt a.txt
>sed的工作方式:命令行上的每个文件名会一次打开于读取。如果没有文件则使用标准输入,文件名"-"(单个破折号)可用于表示标准输入。sed读取每个文件,一次读一行,当多有操作(命令)完成后,sed会将模式空间的最后内容打印到标准输出,再回到开始处,读取另一个输入行。
>sed打印:-n 于p搭配
```SHELL
sed -n aaap a.txt
2、Sed的其他应用
/oldfunc/ s/$/#xxx:migrate to newfunc/ 注释部分源代码
/Tolstoy/ s//& and Camus/g
2.2、完全一致的匹配:自最左边开始匹配、针对每一个子模式、由左至右,必须匹配到最长的可能字符串。
echo Tolstoy is worldly | sed s/T.*y/Camus/
在文本查找时有可能会匹配到Null字符串。而在执行文本时,也允许你插入文本:
echo abc | sed -e s/1*/1/g
以上是关于sed:输入流编辑器的主要内容,如果未能解决你的问题,请参考以下文章