我有一份档案
###
A
B
C
@@@
###
D
E
F
@@@
###
G
H
I
@@@
我想删除#和@之间的所有行(如果它包含A
我怎样才能做到这一点呢?
预期结果
###
D
E
F
@@@
###
G
H
I
@@@
我试过了
sed "/###/,/@@@/d"
个
但这是在移除一切.
如果我们可以有多个文本模式,比如删除#和@之间的所有内容,如果它包含‘A’或‘D’,甚至会很有帮助.
谢谢.
我有一份档案
###
A
B
C
@@@
###
D
E
F
@@@
###
G
H
I
@@@
我想删除#和@之间的所有行(如果它包含A
我怎样才能做到这一点呢?
预期结果
###
D
E
F
@@@
###
G
H
I
@@@
我试过了
sed "/###/,/@@@/d"
个
但这是在移除一切.
如果我们可以有多个文本模式,比如删除#和@之间的所有内容,如果它包含‘A’或‘D’,甚至会很有帮助.
谢谢.
您可以使用
sed '/###/{:a;N;/@@@/!ba;/A/d}' file
Details:
/###/
-查找###
,一旦找到,:a
-在当前位置设置a
个标签N
-读取下一行,将其附加到模式空间/@@@/!ba
-如果有@@@
个停止处理块,则转到a
标签/A/d
-如果匹配的块内有A
,则将其删除.请参阅online test:
#!/bin/bash
text=$(echo -e '###\nA\nB\nC\n@@@\n###\nD\nE\nF\n@@@\n###\nG\nH\nI\n@@@')
sed '/###/{:a;N;/@@@/!ba;/A/d}' <<< "$text"
输出:
###
D
E
F
@@@
###
G
H
I
@@@
中的换行符