繁体   English   中英

用双引号替换行

[英]Replace line with double quotes

我想在 OpenBox 启动时用双引号替换一行,例如:

(sleep 2 && terminator -e "htop") &

#(sleep 2 && terminator -e "htop") &

我使用这个命令,但它不起作用:

sed -i "s/(sleep 2 && terminator */#(sleep 2 && terminator -e "htop") &/" ~/.config/openbox/autostart

它给了我这个错误:

`sed: -e expression #1, char : unknown`

尽管它对我有用双引号,但您应该将命令放在单引号中以避免转义内部双引号的问题。

然后,您必须转义& :它代表替换字符串中的“重复整个匹配”。

sed -i 's/(sleep 2 && terminator */#(sleep 2 \&\& terminator -e "htop") \&/' ~/.config/openbox/autostart

或者,由于您基本上只是在前面加上#并保留该行,否则您可以使用

sed -i '/(sleep 2 && terminator -e "htop") &/s/^/#/' ~/.config/openbox/autostart

意思是“如果该行匹配,则在前面加上# ”。

我会使用以下方法来实现目标

sed -i 's/(sleep 2 && terminator -e "htop") &/#&/' ~/.config/openbox/autostart

整个表达式周围的单引号使您无需转义双引号,就像@BenjaminW。 提到, &在替换部分中代表整个匹配,所以要在匹配前加上# ,那么,你需要在替换部分使用/#&/

要恢复操作,我将使用以下内容:

sed -i 's/#\((sleep 2 && terminator -e "htop") &\)/\1/' ~/.config/openbox/autostart

另请注意, -i仅由相对现代的 sed 支持,正如此问题所述

替换字符串中的与号表示搜索字符串中的模式。

所以你可以这样做:

sed -i "s/(sleep 2 && terminator */#&/" ~/.config/openbox/autostart

此外,您可以在外部使用单引号,在内部使用双引号或在内部双引号上使用 \\"。

sed  's/(sleep 2 && terminator -e "htop") &/#(sleep 2 \&\& terminator -e "htop") \&/' ~/.config/openbox/autostart

或者

sed -i "s/(sleep 2 && terminator -e \"htop\") &/#(sleep 2 \&\& terminator -e \"htop\") \&/" ~/.config/openbox/autostart

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM