【问题标题】:SED: Need to use "/" in string to append using sedSED:需要在字符串中使用“/”才能使用 sed 追加
【发布时间】:2015-08-31 16:52:37
【问题描述】:

我需要构建包含“/”字符的 SED 命令。 sed 没有将此命令视为有效:

添加“约翰/街道”

String cmdtest[] = {"sed","-3 a" + "\\","> john\\/street","/scratch/tmp.txt"};

我还需要知道如何替换包含“/”的字符串。

这是我需要执行的操作

cmdtest[] = {"sed","-i","s/ee.jar:/ee.jar:$MY_HOME\\\/lib\\\/jcagent.jar","/scratch/myreg.sh"};

输出应在 myreg.sh 文件中将 {ee.jar} 替换为 {ee.jar:$MY_HOME/lib/jcagent.jar}

【问题讨论】:

  • 您可能需要先使用\\\/ 从java 中转义斜线,以便shell 看到\/ 而不仅仅是/。话虽如此,您可以使用备用分隔符来 sed 完全避免此问题(即s,foo,bar, 等)。
  • 您可以在 sed 命令中使用诸如“#”之类的“浪费”字符而不是“/”。您必须替换所有通常会用“#”格式化命令的“/”字符
  • 请在您的问题中添加示例输入和该示例输入所需的输出。
  • 添加了请看,还有问题中显示为单个\的\\\
  • 您将在 [sed 中斜线的另一个问题](stackoverflow.com/questions/22182050/…)中找到来自 @Jim 的浪费示例

标签: java unix sed


【解决方案1】:

您可以在 sed 中使用任何其他字符而不是 / 作为分隔符,然后您可以将 / 放入字符串中而无需任何转义,例如这是有效的 sed 命令: sed -e 's#something/#something#' 这将用“某事”替换“某事/”

【讨论】:

    【解决方案2】:

    转义 '/' 字符可以通过使用 '/' 来完成。

    例子:

    假设 1.txt 包含 '123'

    $ sed -e 's/1/x/g' 1.txt
    // returns 'x23'
    
    $ sed -e 's/1/\\/g' 1.txt
    // returns '/23'
    

    【讨论】:

      【解决方案3】:

      答案是:

      对字符串中的每个 / 使用 \\ 就像 chenchuk 给出的正确答案:

      $ sed -e 's/1/x/g' 1.txt
      // returns 'x23'
      
      $ sed -e 's/1/\\/g' 1.txt
      // returns '/23'
      

      谢谢

      【讨论】:

        猜你喜欢
        • 2013-03-14
        • 2017-05-28
        • 2021-03-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-10-30
        • 2013-03-09
        • 1970-01-01
        相关资源
        最近更新 更多