【问题标题】:Using sed to replace text with spaces with a defined variable with slashs [duplicate]使用 sed 用带斜线的定义变量替换带有空格的文本 [重复]
【发布时间】:2013-02-20 14:06:57
【问题描述】:

我正在尝试使用 sed 用已定义变量的空格替换一行。

例如,

我想用 $lan 和 lan="~/afile.py

替换“哑字符串”

我假设这条线是

sed "s/a dumb string/$lan/g" file.txt

但这会在 file.txt 中将“哑字符串”部分留空。

我的问题似乎很简单。任何帮助深表感谢。

【问题讨论】:

  • 你确定你设置了变量Ian吗?当你运行 echo "<<$Ian>>" 时会发生什么?
  • 现在是转储字符串还是哑字符串?!
  • 哈哈,这是一个愚蠢的字符串。对不起,我会更正错字
  • @ruakh $lan 设置正确,但我找到了问题的根源。 $lan 是一个文件名,其中包含斜杠。我会澄清这个问题。

标签: bash unix sed


【解决方案1】:

有时搜索字符串中的空格不起作用,因此需要在 centos 中使用 [[:space:]]。

    sed -i 's/User[[:space:]]daemon/User apache/' httpd1.conf

【讨论】:

    【解决方案2】:

    我确定因为我的@lan 变量中有斜杠,所以我需要使用 sed 命令:

    例如

    sed "s:a dumb string:$lan:g" file.txt
    

    这可能是一个新手错误,但我对 sed 不是很熟悉。感谢您的帮助。

    【讨论】:

      【解决方案3】:

      sed 不知道您正在传递一个变量——它将被解释为您正则表达式的另一部分。如果您的替换包含斜杠,最简单的做法是使用备用分隔符字符,如下所示:

      sed "s|a dumb string|$lan|g" file.txt
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-05-29
        • 2021-03-16
        • 2016-02-26
        • 2014-01-09
        • 2018-07-28
        • 2018-03-23
        • 2014-11-27
        • 2019-09-07
        相关资源
        最近更新 更多