我需要在文件 /opt/google/chrome/google-chrome 中更改一行
exec -a "$0" "$HERE/chrome" "$@"
到
exec -a "$0" "$HERE/chrome" "$@" --test-type --no-sandbox
所以我的命令是:
sed -i 's/exec -a "$0" "$HERE/chrome" "$@"/exec -a "$0" "$HERE/chrome" "$@" --test-type --no-sandbox/' /opt/google/chrome/google-chrome
返回:
sed:-e 表达式 #1,字符 37:'s' 的未知选项
我搜索后发现命令中的字符容易引起混淆,但我似乎找不到答案,不知道是哪些字符,也不知道该如何正确形成。有人能帮我把命令编辑成正确的语法吗?
答案1
而不是s/pattern/replace/
使用类似的s!pattern!replace!
(或者如果您不喜欢,可以使用不同的字符!
)——这是因为模式和替换字符串都包含该/
字符。
您的 sed 命令是
s/exec -a "$0" "$HERE/chrome" "$@"/exec -a "$0" "$HERE/chrome" "$@" --test-type --no-sandbox/
- 模式是
exec -a "$0" "$HERE
, - 替代品是
chrome" "$@"
- 然后标志(
s/re/repl/flags
)是exec
- 有一个
e
标志,但是x
无法c
识别。
- 有一个
还要注意,$
在循环表达式中是一个特殊字符,需要进行转义。
尝试这个:
s!exec -a "\$0" "\$HERE/chrome" "\$@"!& --test-type --no-sandbox!
&
替换字符串中的内容将被替换为与模式匹配的文本
或者,对于与“exec ... chrome ...”匹配的行,将标志添加到行末尾:
\!exec -a "\$0" "\$HERE/chrome" "\$@"! s/$/ --test-type --no-sandbox/
答案2
是的,谢谢。对我有用的是:
sed -i 's!exec -a "$0" "$HERE/chrome" "$@"!exec -a "$0" "$HERE/chrome" "$@" --test-type --no-sandbox'! /opt/google/chrome/google-chrome