【问题标题】:How to replace a text string with dollar sign $ in Linux?如何在 Linux 中用美元符号 $ 替换文本字符串?
【发布时间】:2018-02-14 05:50:36
【问题描述】:

我正在尝试将当前目录中所有 .txt 文件中的文本“../../Something”替换为“$Something”。让我知道哪里出错了?

find . -name "*.txt" | xargs sed -i "s/..\/..\/Something/\'\$Something'/g"

错误 - 变量名必须包含字母数字字符

我也试过了,但是不行-

find . -name "*.txt" | xargs sed -i "s/..\/..\/Something/\\$Something/g"

对正确的命令有什么建议吗?

【问题讨论】:

  • 我认为您在 s 之前缺少 % 并尝试使用逗号作为分隔符,例如:"%s,../../Something,$Something,g"
  • 我需要一个正确的命令来解决 $.Even 的替换问题。

标签: linux unix terminal


【解决方案1】:

您的 shell 将 $ 视为变量的开头。

有两种方法可以让它发挥作用:

  1. 使用单引号,告诉 shell 不执行任何变量插值(除其他外):

    find . -name "*.txt" | xargs sed -i 's/..\/..\/Something/\$Something/g'

  2. 从shell sed 中转义$。这需要 3 个反斜杠(第一个转义第二个反斜杠,第二个转义字符串到达​​ sed 后的美元符号,第三个转义 shell 中的美元符号,因此它不会被视为变量):

    find . -name "*.txt" | xargs sed -i s/..\\/..\\/Something/\\\$Something/g

【讨论】:

    【解决方案2】:

    您可以尝试删除第二个命令中给出的额外反斜杠。

    找到 . -name "*.txt" | xargs sed -i 's/../../Something/\$Something/g'

    【讨论】:

    • 它给出了错误信息:-e expression #1, char 9: unknown option to `s'
    【解决方案3】:

    测试了以下内容,它对我有用。让我知道这是否有效

    find . -name "*.txt" | xargs sed -i "s,../../Something,$\Something,g"
    

    【讨论】:

    • 输出为非法变量名。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-13
    • 2021-06-01
    • 2020-10-12
    • 2012-09-21
    • 2018-01-15
    • 2018-01-16
    相关资源
    最近更新 更多