UNIX中的sed命令 - 无法理解

时间:2016-11-16 07:44:16

标签: bash shell unix sed

我是UNIX的新手,正在浏览一个脚本文件,并且是一个代码片段。 我试着分析一下这个片段。我读了一下'sed - stream editor'命令和sed -e选项。 我还执行了代码片段,然后才能看到输出。但我无法理解最新情况。以下是摘录。

ID=101
echo ABCDEFGHIJK KLMJN | \
sed -e "1,\$s/ *$/^\"`echo $ID`\"/" \
>a.txt

输出为ABCDEFGHIJK KLMJN^"101"

脚本文件中有很多地方使用sed命令。有人可以帮我解释这些片段吗?

1 个答案:

答案 0 :(得分:3)

你应该逐个看一下:

sed -e "1,\$s/ *$/^\"`echo $ID`\"/"
       |    |    |               |
         1    2          3
  1. 您只想处理特定的行。对于该示例,从第一行开始,以最后一行结束。在这种情况下,不需要以这种方式编写它。所以

    sed -e "s/ *$/^\"$(echo $ID)\"/"
    

    完全相同。

  2. 这是替换命令。在这种情况下,您将在最后一个非空格和行结尾之间替换零个或多个空格。如果您想了解更多相关信息,我建议使用Google搜索regex

  3. 反引号(``)实际上是一种“反对派”。它会导致shell在替换之前执行命令。为了更易读,您应该使用$(echo $ID)。之后,将2.正则表达式替换为2.结果为^"101"

  4. 之后结果为ABCDEFGHIJK KLMJN^"101"