sed命令,若模式匹配,则删除该行,并再次在以下行中查找模式,然后将其删除

sed命令,若模式匹配,则删除该行,并再次在以下行中查找模式,然后将其删除,sed,Sed,SED命令删除包含compute 4及其IP的行。必须使用模式搜索IP 预期产出: compute_hosts: compute1: ip: 12.12.12.12 compute2: ip: 13.13.13.13 # compute3: # ip: 14.13.12.12 # compute4: # ip: 12.23.34.45 metering-compute_hosts: compute1: ip: 31.13.13.23 co

SED命令删除包含compute 4及其IP的行。必须使用模式搜索IP 预期产出:

compute_hosts:
  compute1:
    ip: 12.12.12.12
  compute2:
    ip: 13.13.13.13
#  compute3:
#    ip: 14.13.12.12
#  compute4:
#    ip: 12.23.34.45

metering-compute_hosts:
  compute1:
    ip: 31.13.13.23
  compute2:
    ip: 57.67.575.45
#  compute3:
#    ip: 32.322.4.35
#  compute4:
#    ip: 23.435.67.7

compute 4及其ip应在输出中删除

此sed将删除带有模式的行和以下一行之后的行:

compute_hosts:
      compute1:
        ip: 12.12.12.12
      compute2:
        ip: 13.13.13.13
    #  compute3:
    #    ip: 14.13.12.12

 metering-compute_hosts:
      compute1:
        ip: 31.13.13.23
      compute2:
        ip: 57.67.575.45
    #  compute3:
    #    ip: 32.322.4.35
测试:


此sed将删除带有图案的线条,并在以下内容后删除一行:

compute_hosts:
      compute1:
        ip: 12.12.12.12
      compute2:
        ip: 13.13.13.13
    #  compute3:
    #    ip: 14.13.12.12

 metering-compute_hosts:
      compute1:
        ip: 31.13.13.23
      compute2:
        ip: 57.67.575.45
    #  compute3:
    #    ip: 32.322.4.35
测试:

编辑:因为OP告诉下一行字符串
computer4
可能没有IP,所以使用此匹配函数在第一行中匹配它

$ sed '/compute4/,+1d' compute
compute_hosts:
  compute1:
    ip: 12.12.12.12
  compute2:
    ip: 13.13.13.13
#  compute3:
#    ip: 14.13.12.12

metering-compute_hosts:
  compute1:
    ip: 31.13.13.23
  compute2:
    ip: 57.67.575.45
#  compute3:
#    ip: 32.322.4.35


考虑到您的输入文件与所示示例相同,请尝试以下内容(如果您对
awk
满意)

编辑:因为OP告诉下一行字符串
computer4
可能没有IP,所以使用此匹配函数在第一行中匹配它

$ sed '/compute4/,+1d' compute
compute_hosts:
  compute1:
    ip: 12.12.12.12
  compute2:
    ip: 13.13.13.13
#  compute3:
#    ip: 14.13.12.12

metering-compute_hosts:
  compute1:
    ip: 31.13.13.23
  compute2:
    ip: 57.67.575.45
#  compute3:
#    ip: 32.322.4.35


考虑到您的输入文件与所示示例相同,请尝试以下内容(如果您对
awk
满意)


对于awk,以下各项将起作用:

awk '/compute4/{getline;next} 1'  Input_file
  • 范围运算符
    /pattern1/,/pattern2/
    从匹配
    /pattern1/
    的行一直返回true,直到匹配
    /pattern2/
    的行
  • 我们希望排除上面的行;下面的
    {next}
    适用于它

使用awk时,以下方法可行:

awk '/compute4/{getline;next} 1'  Input_file
  • 范围运算符
    /pattern1/,/pattern2/
    从匹配
    /pattern1/
    的行一直返回true,直到匹配
    /pattern2/
    的行
  • 我们希望排除上面的行;下面的
    {next}
    适用于它
试试这个

N
连接模式空间中的下一个输入行

测试:

试试这个

N
连接模式空间中的下一个输入行

测试:



不清楚,请添加更多关于应删除哪些行的信息,并在您的帖子中的代码标记中发布预期的输出。我已经添加了我期望的内容。始终建议您在代码标记中的帖子中添加您的努力。欢迎来到stackoverflow,请用一个结构良好的具体问题清楚地暴露您的问题。阅读不清楚,请添加更多关于应删除哪些行的信息,并在您的帖子中的代码标记中发布预期的输出。我已经添加了我期望的内容。始终建议您在代码标记中的帖子中添加您的努力。欢迎来到stackoverflow,请用一个结构良好的具体问题清楚地暴露您的问题。阅读使用这个命令,我已经这样做了,但我们必须搜索ip后,计算4,然后删除。。因为可能在计算4的下一行之后是空的,所以必须使用pattern删除ip使用这个命令,我已经做了这个,但是我们必须在计算4之后搜索ip,然后删除它。。因为可能在具有compute 4的行的下一行之后为空,所以ip必须使用patternSir删除,awk可以,但ip必须使用pattern搜索,因为可能在具有compute 4的行的下一行之后为空,所以ip必须使用patternSir删除pattern@J.Doerano,现在请检查我的编辑解决方案,让我知道这是否对您有帮助?先生,awk可以,但ip必须使用模式进行搜索,因为可能是在具有compute 4的下一行之后,所以ip必须使用pattern@J.Doerano,请现在检查我的编辑解决方案,并让我知道这是否对您有帮助,我不认为字符串computer4和ip地址都在同一行中,因此这可能不会给出预期的输出,rest OP可以在这一行中说明更多。这两个字符串不会在同一行中。“范围”操作符适用于行的范围。我已经根据OP的评论用假设输入测试了脚本。还是我误解了你的评论?看到OP的问题我想他们不在同一行,但我的拙见是rest OP可以确认。IMHO,我不认为他们都是字符串computer4和ip地址在同一行,因此,这可能不会给出预期的输出,rest OP可以告诉我们更多关于这一点的信息。“范围”操作符适用于行的范围。我已经根据OP的评论用假设输入测试了脚本。还是我误解了你的评论?我看到OP的问题时的想法他们不在同一行,但我的拙见rest OP可以证实。
sed -re '/compute4/ {N;/\s+ip:/d}'
$ cat compute | sed -re '/compute4/ {N;/\s+ip:/d}'
compute_hosts:
  compute1:
    ip: 12.12.12.12
  compute2:
    ip: 13.13.13.13
#  compute3:
#    ip: 14.13.12.12

metering-compute_hosts:
  compute1:
    ip: 31.13.13.23
  compute2:
    ip: 57.67.575.45
#  compute3:
#    ip: 32.322.4.35