Ott*_*o45 2 regex macos bash sed
我正在尝试使用sed替换CMakelists.txt文件中的一些文本和bash变量的值,但是我收到一个错误:
sed: 1: "'s/iPhone": invalid command code ?
Run Code Online (Sandbox Code Playgroud)
sed命令:
sed -i "" 's/iPhone Developer/'$PROVPROF'/g' CMakelists.txt
Run Code Online (Sandbox Code Playgroud)
PROVPROF总会有这种格式的东西:
iPhone Developer: Firstname Lastname (Numbers/Letters)
Run Code Online (Sandbox Code Playgroud)
小智 8
这不起作用的原因是因为 linux 上的 sed 与 mac 上的 sed 不同。为了让您的命令按预期工作,我建议通过自制软件安装 gnu-sed。
您可以通过以下方式执行此操作: brew install gnu-sed --with-default-names
注意:--with-default-namesflag 会尝试将 gnu-sed 与您的 sed 进行符号链接,这应该是您想要的,但如果不是,我警告过您!
然后hash -r在 bash 或rehashzsh 上运行。
如果之后它不起作用,您必须通过以下方式手动符号链接 gnu-sed 和 sed:
ln -s /usr/local/bin/gsed $(which sed)
如果变量中的字符与您以前使用的分隔符相同s,请尝试使用另一个分隔符:
sed -i '' "s|iPhone Developer|$PROVPROF|g" CMakelists.txt
Run Code Online (Sandbox Code Playgroud)
更罕见的东西:
sed -i '' $'s\xFFiPhone Developer\xFF'"$PROVPROF"$'\xFFg' CMakelists.txt
Run Code Online (Sandbox Code Playgroud)
另外,不要试图将参数存储在变量上.分词并不总是像你一样.这是错的:
command="sed -i '' 's|iPhone Developer|$PROVPROF|g' CMakelists.txt"
$command
Run Code Online (Sandbox Code Playgroud)
sed: -e expression #1, char 1: unknown command: `''会出现错误信息.在其他方面sed,消息可能不同.
但是你可以使用一个数组:
command=(sed -i '' "s|iPhone Developer|$PROVPROF|g" CMakelists.txt)
"${command[@]}"
Run Code Online (Sandbox Code Playgroud)
尽管如此,它仍然不值得称道.如果您可以直接运行它,请直接运行它.
| 归档时间: |
|
| 查看次数: |
4668 次 |
| 最近记录: |