我想在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`
答案 0 :(得分:1)
即使它对我有双引号,你应该把你的命令放在单引号中,以避免转义内部双引号的问题。
然后,您必须转义&
:它代表替换字符串中的“重复整个匹配”。
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
表示“如果该行匹配,则前置#
”。
答案 1 :(得分:0)
我会使用以下内容来实现目标
FXMLLoader loader = new FXMLLoader(getClass().getResource("path/to/fxml/file.fxml"));
Parent root = loader.load();
Introduction controller = loader.getController();
controller.setText("Hello World!");
Scene scene = new Scene(root);
// etc...
整个表达式周围的单引号使您无需在内部转义双引号,并将其作为@BenjaminW。提到,替换部分中的sed -i 's/(sleep 2 && terminator -e "htop") &/#&/' ~/.config/openbox/autostart
代表整个匹配,因此要在&
之前添加匹配,您需要在替换部分中使用#
。
要恢复操作,我会使用以下内容:
/#&/
另请注意,sed -i 's/#\((sleep 2 && terminator -e "htop") &\)/\1/' ~/.config/openbox/autostart
仅由相对现代的sed支持,this question告诉
答案 2 :(得分:0)
替换字符串中的&符号会调用搜索字符串中的模式。
所以你可以这样做:
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