Bash sed-won';t从文件中删除多行字符串的实例
我正在尝试删除占用多行的字符串的所有实例。下面是我试图操纵的文件的摘录:Bash sed-won';t从文件中删除多行字符串的实例,bash,sed,Bash,Sed,我正在尝试删除占用多行的字符串的所有实例。下面是我试图操纵的文件的摘录: 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_r
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
sed -e '{
N
s/xdotool mousemove_relative --sync --polar 90 32\nxdotool mousemove_relative --sync --polar 270 32; //g
P
D
}' file.sh
以下是我为此编写的代码:
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
但是,运行此代码不会对目标文件产生任何影响。我已经检查了语法并进行了一些搜索,我能想到为什么这不起作用。也许我使用的工具不适合这份工作。如果您能深入了解此操作不起作用的原因,我们将不胜感激。
sed默认情况下一次在一行上工作。尝试使用N
命令一次读取两行,如下所示:
mousemove_relative --sync --polar 180 2
mousemove_relative --sync --polar 180 2
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
):
要替换行B
和行C
,请运行:
sed -e '{
N
s/Line B\nLine C/New Line B and C/g
P
D
}' test.file
sed
将:
- 读取
行A
N
命令读取下一行,因此缓冲区是行A\N行B
s/../../g
find and replace应用于缓冲区
P
命令打印缓冲区的第一行
D
命令从缓冲区的第一行弹出
- 下一个
N
命令追加另一行
sed
默认情况下一次在一条线上工作。尝试使用N
命令一次读取两行,如下所示:
mousemove_relative --sync --polar 180 2
mousemove_relative --sync --polar 180 2
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
):
要替换行B
和行C
,请运行:
sed -e '{
N
s/Line B\nLine C/New Line B and C/g
P
D
}' test.file
sed
将:
- 读取
行A
N
命令读取下一行,因此缓冲区是行A\N行B
s/../../g
find and replace应用于缓冲区
P
命令打印缓冲区的第一行
D
命令从缓冲区的第一行弹出
- 下一个
N
命令追加另一行
输出:
mousemove_relative --sync --polar 180 2
mousemove_relative --sync --polar 180 2
mousemove_relative--sync--polar 180 2
mousemove_relative--sync--polar 180 2
输出:
mousemove_relative --sync --polar 180 2
mousemove_relative --sync --polar 180 2
mousemove_relative--sync--polar 180 2
mousemove_relative--sync--polar 180 2