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