我需要像这样运行一个sed命令作为shell脚本的一部分
sed 's/brad/pitt/g'
我应该提供brad作为命令行参数并运行像这样的命令
sed s/$1/pitt/g
虽然这个命令正在运行,但我想知道的是如何在不删除引号的情况下执行此命令,因为我可能在替换字符串中有一些需要引号的内容。
我对引号不太自信,这就是为什么我想通过一些调整来看看事情是如何工作的?
答案 0 :(得分:18)
您可以sed "s/$1/pitt/g"
或sed 's/'$1'/pitt/g'
或者,如果命令行参数不是一个简单的单词,sed 's/'"$1"'/pitt/g'
。
答案 1 :(得分:3)
有两种方法可以做到:
1)使用双引号
sed "s/$1/pitt/g"
2)将命令构造为字符串并使用eval
运行它SEDCMD="s/$1/pitt/g"
eval sed $SEDCMD
eval方法有效并且非常灵活,但被认为是危险的,因为它易受代码注入攻击。如果您不信任您的输入,请不要使用#2
更新:注释是正确的,使用eval没有任何好处(我曾经一直使用eval和sed这种方式,我不知道为什么......)构建sed字符串供以后使用,但是,功能强大:所以我会添加一个新的3)并留下2给人们模拟
3)将命令构造为字符串,然后运行其中的一个或多个
FOO='s/\(.*\)bar/\1baz/'
BAR="s/$1/pitt/g"
sed -e $BAR -e $FOO <infile >outfile