【问题标题】:sed with literal string--not input file带有文字字符串的 sed——不是输入文件
【发布时间】:2012-10-14 21:17:22
【问题描述】:

这应该很简单:我想针对文字字符串而不是输入文件运行 sed。如果您想知道为什么,例如编辑存储在变量中的值,不一定是文本数据。

当我这样做时:

sed 's/,/','/g' "A,B,C"

其中 A,B,C 是我要更改为 A','B','C 的文字

我明白了

Can't open A,B,C

好像它认为 A,B,C 是一个文件。

我尝试通过管道将其发送到 echo:

echo "A,B,C" | sed 's/,/','/g' 

我收到提示。

正确的做法是什么?

【问题讨论】:

    标签: linux unix sed


    【解决方案1】:

    你有一个单引号冲突,所以使用:

     echo "A,B,C" | sed "s/,/','/g"
    

    如果使用,你也可以这样做(<<<here-string):

    sed "s/,/','/g" <<< "A,B,C"
    

    但不是

    sed "s/,/','/g"  "A,B,C"
    

    因为sed 期望文件作为参数

    编辑

    如果您使用 或任何其他:

    echo string | sed ...
    

    【讨论】:

    • 奇怪,对我不起作用......意识到这是前一段时间发布的,但如果这是问题的话,奇怪的弃用
    【解决方案2】:

    随心所欲地工作:

    echo "A,B,C" | sed s/,/\',\'/g
    

    【讨论】:

      【解决方案3】:

      我在 bash 脚本中使用变量的版本:

      查找任何反斜杠并用正斜杠替换:

      input="This has a backslash \\"
      
      output=$(echo "$input" | sed 's,\\,/,g')
      
      echo "$output"
      

      【讨论】:

        猜你喜欢
        • 2018-07-25
        • 2017-05-05
        • 2021-01-05
        • 2018-08-20
        • 1970-01-01
        • 1970-01-01
        • 2013-06-21
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多