一条 sed 命令可以添加多少个表达式?

一条 sed 命令可以添加多少个表达式?

sed -e 'expression1' -e 'expression2' inputfile效果很好。

在我的作品中,我在sedshell 脚本内的命令中添加了许多表达式。但是,表情分为两种不同的颜色。

在此输入图像描述sed一个命令 中可以添加多少个表达式sed才能处理它?

答案1

  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>
    
  2. sed脚本可以是任何只要将sed脚本放入文件中并用 a或换行符(或两者)分隔每个sed命令即可。;运行它们,例如:

    sed -f scriptfilename ...
    

    您可以sed像编写其他脚本语言一样编写独立脚本。chmod +x如果您将其#!/bin/sed -f作为第一行,它们甚至可以成为可执行文件。

    例如:

    #!/bin/sed -f
    
    s/foo/bar/
    s/abc/def/
    
  3. 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

相关内容