【问题标题】:sed using dollar sign for both environment variable and end-of-line pattern matching [duplicate]sed 使用美元符号进行环境变量和行尾模式匹配[重复]
【发布时间】:2019-09-07 07:46:00
【问题描述】:

sed中,我们使用双引号来读取以美元符号表示的环境变量,如果我想同时使用美元符号作为行尾模式该怎么办?

这是我的命令示例(不工作),

cat inputfile | xargs -n4 sh -c 'sed -ne "$1,$2p" bigfile|sed -e "$s/$/\n+--$3-----+/" > $0.outputfile' 

我将输入文件的内容(包含输出文件名、目标行号(开始和结束)以及要添加到每个文件的一些标签)传送到xargs,它将大文件分成更小的文件。输入文件示例:

dataA
59
88
sometagA
dataB
91
236
sometagB
....

在第二个sed 命令中:sed -e "$s/$/\n+--$3-----+/"$3 是来自xargs 的环境变量,我想使用其他 $s 和 $ 来定位文件结尾和行尾模式分别,因为我打算在每个输出文件中插入一些标签。我不能同时使用单引号和双引号,因为外部 xargs 已经使用了单引号。

【问题讨论】:

    标签: bash sed environment-variables


    【解决方案1】:

    使用反斜杠从 shell 中转义美元符号。

    xargs -n4 sh -c 'sed -ne "$1,$2p" bigfile |
        sed -e "\$s/\$/\n+--$3-----+/" > "$0".outputfile' <inputfile
    

    你只传递了四个参数,它们从零开始编号,所以我猜你的意思是$3,而不是$4

    还要注意如何避免useless cat.

    这两个sed 脚本可能会合并成类似的东西

    sed -n "$1,$2!d;$2{;s/\$/+--$3-----+/p;q;}p"
    

    【讨论】:

      【解决方案2】:

      将其从bash shell 中转出以获得结束锚点

      sed -ne "$1,$2p" bigfile|sed -e "$s/\$/\n+--$3-----+/"
      

      再次将其从sed 中转义,以获得文字美元符号,例如;

      sed -ne "$1,$2p" bigfile|sed -e "$s/\$/\n+--$3-----+/| sed 's/.*/& pays \\$99/'
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-03-24
        • 1970-01-01
        • 2013-07-31
        • 1970-01-01
        • 2015-05-12
        • 1970-01-01
        • 2018-01-18
        相关资源
        最近更新 更多