答案1
sed
在命令行上输入的脚本(或嵌入 shell 脚本中)可以是任意长度,最多可达 shell 允许的最大命令行长度 - 对于现代 shell,长度为兆字节。还有就是不是如果您希望脚本执行不止一件事,则需要
-e
多次使用。sed
您可以使用换行符或分号分隔多个命令。例如,代替:
sed -e 's/foo/bar/' -e 's/abc/def/'
你可以做:
sed -e 's/foo/bar/; s/abc/def/'
或者:
sed -e 's/foo/bar s/abc/def'
与 sh 一样,语句之间的额外空格并不重要。我
;
在上面第一个示例中的后面使用了一个空格,并在第二个示例中使用了更多空格进行缩进,以提高可读性。请注意,某些
sed
命令仅由换行符终止,而不是由;
.这些是;
sed 命令分隔符和换行符这一一般规则的有据可查的例外情况。详细信息请参见https://www.gnu.org/software/sed/manual/html_node/Multiple-commands-syntax.html(本文档适用于所有/大多数版本sed
- GNU 的非标准扩展在提及时会注明)。例如,如果您想在特定字符串之后立即添加几行文本,则(append) 命令是只能以换行符终止的命令
a
之一。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>
sed
脚本可以是任何只要将sed
脚本放入文件中并用 a或换行符(或两者)分隔每个sed
命令即可。;
运行它们,例如:sed -f scriptfilename ...
您可以
sed
像编写其他脚本语言一样编写独立脚本。chmod +x
如果您将其#!/bin/sed -f
作为第一行,它们甚至可以成为可执行文件。例如:
#!/bin/sed -f s/foo/bar/ s/abc/def/
sed
不仅仅是一个简单的“命令”,它是一种脚本语言 - 大多数人只是在管道中使用它来进行一些小而简单的正则表达式替换,但它sed
的功能远不止于此。请参阅
man sed
了解更多详情。 GNUsed
还提供了完整的文档德克萨斯信息网格式。运行info sed
来阅读它(或者pinfo sed
如果您pinfo
安装了查看器 - 它远远优于info
)。相同的文档也以多种格式提供,网址为https://www.gnu.org/software/sed/manual/。
答案2
最多可达命令行的最大长度。命令行长度的限制不是由 shell 施加的,而是由操作系统施加的。此限制通常在数百千字节范围内。 POSIX 表示此限制 ARG_MAX,在符合 POSIX 的系统上,您可以使用以下命令查询它
$ getconf ARG_MAX # Get argument limit in bytes
测试:
$ sed $(printf ' -e s/%s//g' $(seq 0001000000)) file