我正在尝试删除占用多行的字符串的所有实例。这是我试图操纵的文件的摘录:
xdotool mousemove_relative --sync --polar 90 32
xdotool mousemove_relative --sync --polar 270 32; xdotool mousemove_relative --sync --polar 180 2
xdotool mousemove_relative --sync --polar 90 32
xdotool mousemove_relative --sync --polar 270 32; xdotool mousemove_relative --sync --polar 180 2
最终结果应如下所示:
mousemove_relative --sync --polar 180 2
mousemove_relative --sync --polar 180 2
以下是我为此做的代码:
width=16
sed -i -e 's/xdotool mousemove_relative --sync --polar 90 '$(($width * 2))''\n'xdotool mousemove_relative --sync --polar 270 '$(($width * 2))'; //g' file.sh
但是,运行此代码不会对目标文件执行任何操作。我检查了语法并做了一些搜索,我可以想到为什么这不起作用的任何原因。也许我没有使用正确的工具来完成工作。任何有关为什么不起作用的见解将不胜感激。
答案 0 :(得分:1)
sed
一次在一行上工作。尝试使用N
命令一次读取两行:
sed -e '{
N
s/xdotool mousemove_relative --sync --polar 90 32\nxdotool mousemove_relative --sync --polar 270 32; //g
P
D
}' file.sh
以下是一个更简单的示例文件(test.file
)的工作原理:
Line A
Line B
Line C
Line D
要替换您运行的Line B
和Line C
:
sed -e '{
N
s/Line B\nLine C/New Line B and C/g
P
D
}' test.file
sed
将:
Line A
。N
命令读取下一行,因此缓冲区为Line A\nLine B
。s/../../g
查找和替换将应用于缓冲区。P
命令打印缓冲区的第一行。D
命令弹出缓冲区的第一行。N
命令追加另一行。答案 1 :(得分:1)
sed -n 's/.* xdotool //p' file.sh
输出:
mousemove_relative --sync --polar 180 2 mousemove_relative --sync --polar 180 2