我尝试使用sed将bak变量的值替换为CMakelists.txt文件中的某些文本,但我收到错误:
sed: 1: "'s/iPhone": invalid command code ?
sed命令:
sed -i "" 's/iPhone Developer/'$PROVPROF'/g' CMakelists.txt
PROVPROF总会有这种格式的东西:
iPhone Developer: Firstname Lastname (Numbers/Letters)
答案 0 :(得分:6)
如果变量中的字符与用于s
的分隔符相同,请尝试使用其他分隔符:
sed -i '' "s|iPhone Developer|$PROVPROF|g" CMakelists.txt
更罕见的事情:
sed -i '' $'s\xFFiPhone Developer\xFF'"$PROVPROF"$'\xFFg' CMakelists.txt
另外,请勿尝试将参数存储在变量中。分词并不总是像你一样。这是错的:
command="sed -i '' 's|iPhone Developer|$PROVPROF|g' CMakelists.txt"
$command
会出现sed: -e expression #1, char 1: unknown command: `''
之类的错误消息。在其他sed
上,消息可能不同。
但你可以使用数组:
command=(sed -i '' "s|iPhone Developer|$PROVPROF|g" CMakelists.txt)
"${command[@]}"
但是,它仍然不值得称道。如果您可以直接运行它,请直接运行它。
答案 1 :(得分:1)
这不起作用的原因是因为linux上的sed与mac上的sed不同。为了使命令按预期工作,我建议通过自制软件安装gnu-sed。
您可以通过以下方式执行此操作:brew install gnu-sed --with-default-names
注意:--with-default-names
标志会尝试用你的sed符号链接gnu-sed,应该是你想要的,但如果没有,我警告你!
然后在bash上运行hash -r
,或在zsh上运行rehash
。
如果之后不起作用,则必须通过以下方式手动用gdu-sed与sed进行符号链接:
ln -s /usr/local/bin/gsed $(which sed)
答案 2 :(得分:0)
file.txt
包含:
Angelina used to like iPhone Developers.
Now she's more of an Android Developer fan-girl.
和Bash脚本一样:
#!/bin/bash
#
#
export MONKEY_1="Billy Bob";
export MONKEY_2="Brad Pitt";
sed -e "s/iPhone Developer/$MONKEY_1/g" -e "s/Android Developer/$MONKEY_2/g" file.txt
运行它会产生:
Angelina used to like Billy Bobs.
Now she's more of an Brad Pitt fan-girl.