【问题标题】:What's the meaning of this sed command?这个 sed 命令是什么意思?
【发布时间】:2025-04-12 05:20:02
【问题描述】:

有人可以帮我解决这个 bash 命令吗:

sed -i "s/\$CORPUS_DATA/$CORPUS_DATA/g" conf/*.xml

这是什么意思?

【问题讨论】:

  • 告诉我们您了解哪些部分以及您不了解哪些部分。您可以在*.com/tags/sed/info中找到一些信息
  • 我知道它是用来替换值的,但我有一个错误:sed: -e expression #1, char 17: unknown option to `s'
  • 在这种情况下,请添加一个示例来显示失败的情况。我们无法单独使用命令进行调试。需要示例输入行和使用的变量的示例值.. 猜测一下,问题和这些答案中提到的链接应该对您有所帮助:*.com/a/7680548*.com/questions/9366816/sed-unknown-option-to-s

标签: regex bash sed command


【解决方案1】:

它将文件中text“$CORPUS_DATA”的值替换为环境变量$CORPUS_DATA的实际值。

测试一下:

$ CORPUS_DATA=hello
$ echo '$CORPUS_DATA'
$ $CORPUS_DATA
$ echo '$CORPUS_DATA' | sed "s/\$CORPUS_DATA/$CORPUS_DATA/g"
hello

请注意,第一部分转义了 $ 符号,因此正则表达式将匹配文本“$CORPUS_DATA”的字面意思。第二部分没有,这意味着它需要 env 变量的 value

【讨论】:

  • 嗯,第二个 $ 是有问题的。我收到了这个错误:sed: -e expression #1, char 17: unknown option to `s'
  • @pokatore 我无法复制。
  • 斜线只是为了逃避$ 从shell$ 在正则表达式的开头就可以了。要在表达式中转义它,您必须使用 \\\$
【解决方案2】:

以下是代码说明。

sed -i "s/\$CORPUS_DATA/$CORPUS_DATA/g" conf/*.xml

-i 用于将输出保存到 Input_file 本身。

s 使用替换选项更改 \$CORPUS_DATA 与 shell 变量 $CORPUS_DATA 值。

g 表示对当前行中的所有匹配项进行此更改。

conf/*.xml 循环遍历 conf 目录中的所有 xml 文件。

【讨论】: