sed 中带有 xargs 输入的多个命令

sed 中带有 xargs 输入的多个命令

我有一个文件./123bar/foo.txt,其中包含:

pro := text
ver := 1.0
rev := 2

和两个环境变量:

var =2.1
var2=3

我想将所有内容替换ver$var和。预期输出:rev$var2

pro := text
ver := 2.1
rev := 3

find我在下面尝试首先找到所有带有and的文件,grep然后将其传递sed给以实现结果。下面是我正在运行的命令:

find . -name 'foo.txt' | grep -P "\/[0-9]{3}bar" | xargs -I{} sed -E "s/:= *[0-9]+\.[0-9]+ *$/:= $var/g" -E "s/:= [0-9]+ *$/:= $var2/g" {}

它不起作用并给我错误:

sed: can't read s/:= [0-9]+ *$/:= 3/g: No such file or directory
pro := text
ver := 2.1
rev := 45

我如何解决它?也欢迎更简洁/更简洁的解决方案。

答案1

在 sed 中使用多个表达式的选项是-e, 不是-E:

sed -e "s/:= *[0-9]+\.[0-9]+ *$/:= $var/g" -e "s/:= [0-9]+ *$/:= $var2/g"

手册(假设 GNU 给出标签):

'-e SCRIPT'
'--expression=SCRIPT'
将 SCRIPT 中的命令添加到处理输入时要运行的命令集中。

-E用于使用扩展正则表达式。

相关内容