sed -e 'expression1' -e 'expression2' inputfile
效果很好。
对于我的作品,我在sed
shell 脚本内的命令中添加了许多表达式。但是,表情分为两种不同的颜色。
sed
在命令行上输入的脚本(或嵌入在 shell 脚本中)可以是任何长度,直到您的 shell 允许的最大命令行长度 - 现代 shell 的兆字节长。
如果您希望脚本做不止一件事,也没有必要-e
多次使用sed
。您可以使用换行符或分号分隔多个命令。
例如,而不是:
sed -e 's/foo/bar/' -e 's/abc/def/'
Run Code Online (Sandbox Code Playgroud)
你可以做:
sed -e 's/foo/bar/; s/abc/def/'
Run Code Online (Sandbox Code Playgroud)
或者:
sed -e 's/foo/bar
s/abc/def'
Run Code Online (Sandbox Code Playgroud)
与 sh 一样,语句之间的额外空白是无关紧要的。我在;
上面的第一个示例中使用了一个空格,并在第二个示例中使用了更多的缩进空格以提高可读性。
请注意,某些sed
命令仅以换行符终止,而不以;
. 这些是;
sed 命令分隔符和换行符的一般规则的有据可查的例外。有关详细信息,请参阅https://www.gnu.org/software/sed/manual/html_node/Multiple-commands-syntax.html(本文档适用于所有/大多数版本sed
- 提及时会注明 GNU 的非标准扩展)。
例如,如果您想在特定字符串后立即添加几行文本,则a
(append) 命令是sed
只能以换行符终止的命令之一。
/search-string-here/ a\
text line 1 ; semicolons are just text\
text line 2 ; and more text here\
<more sed commands can go here>
Run Code Online (Sandbox Code Playgroud)sed
脚本可以是您想要的任何长度,只要您将sed
脚本放在一个文件中并sed
用一个;
或一个换行符(或两者)分隔每个命令。运行它们,例如:
sed -f scriptfilename ...
Run Code Online (Sandbox Code Playgroud)
您可以像编写sed
其他脚本语言一样编写独立脚本。chmod +x
如果您将它们#!/bin/sed -f
作为第一行,它们甚至可以成为可执行文件。
例如:
#!/bin/sed -f
s/foo/bar/
s/abc/def/
Run Code Online (Sandbox Code Playgroud)sed
不仅仅是一个简单的“命令”,它是一种脚本语言——大多数人只是在管道中使用它来进行一些小而简单的正则表达式替换,但sed
功能远不止于此。
有关man sed
更多详细信息,请参阅。GNUsed
还带有Texinfo格式的完整文档。运行info sed
阅读它(或者pinfo sed
如果您安装了pinfo
查看器 - 它远优于info
)。在https://www.gnu.org/software/sed/manual/ 上还提供了多种格式的相同文档。