很抱歉,如果这是一个愚蠢的问题,但我只是迷失了我的sed命令可能出错的地方。
这是我拥有的所有命令:
file="hello_world.cpp"
grep -lrI "$file" dir/ | xargs sed -i 's/\(\$file\)/\1\.bin/'
基本上我正在搜索包含字符串" hello_world.cpp"的任何文件,然后将它们传递给sed以将扩展名.bin附加到字符串(是的,这可能没有意义,但是我&# 39;我只是使用一个通用的例子。我确实需要这个特定功能来处理我正在做的事情。
我遇到的问题是,当grep和字符串赋值按预期工作时,sed命令不是。令我更加困惑的是,以下命令有效。
grep -lrI "$file" dir/ | xargs sed -i 's/\(hello_world.cpp\)/\1\.bin/'
这将替换字符串" hello_world.cpp"与" hello_world.cpp.bin"在包含字符串" hello_world.cpp"的所有文件中,这正是我想要的。
如果有人可以帮助指出我的错误,我们将不胜感激。感谢。
答案 0 :(得分:1)
问题出在这里:
xargs sed -i 's/\(\$file\)/\1\.bin/'
由于您在单引号内使用shell变量,因此它不会被扩展。
您可以使用双引号将其展开:
xargs sed -i "s/$file/&.bin/"
另请注意,您无需使用捕获组,因为您可以使用&
替代。