sed删除两个图案之间的线条(不包括末端图案)
给定文本sed删除两个图案之间的线条(不包括末端图案),sed,Sed,给定文本 _adsp TXT "dkim=all" VVKMU6SE3C2MF88BG4DJQAECMR9SIIF0 NSEC3 1 1 10 C4F407437E8EA4C5 ( 175MCHR31K25LP89OVJI5LCE0JA2N2AP A MX TXT AAAA RRSIG SPF ) RRSIG NSEC3 7 3 1800 ( 20200
_adsp TXT "dkim=all"
VVKMU6SE3C2MF88BG4DJQAECMR9SIIF0 NSEC3 1 1 10 C4F407437E8EA4C5 (
175MCHR31K25LP89OVJI5LCE0JA2N2AP
A MX TXT AAAA RRSIG SPF )
RRSIG NSEC3 7 3 1800 (
20200429171433 20200330161758 11672 example.com
H3l26qmtkuiFZCeSYCCAo5krFE3gjM0I8UeQ9jhj3STy
X6fM0YizCHEuv4VZynOJGJc1XJnHRHI+p7yLlZ+OVseK
UfIkPVP+VOmlerwozEpM+Tnt8evwnMTDbcn0zxf/6YJx
kZeO2AszWkRZ0bctqW7INYo8YuyyuTSxSr8se27fiaPA
4GXQymepGgv/JGqargzHbyhhkDhENmNo7Qwkjl+a0kI4
6qqKcEWCsDvnlYUQiDFzc5oRs2j7TT9uybTfwUDQxV+t
MQFMhzu7LNbRIUuOb16sAEGSdl9mWQ4sZRJ9wuXJWbso
G+3tY0pBbq4ffScz/JKcrJ0qAuBF1F5JcQ== )
$TTL 1800
我想去掉带有“(不以空格开头)NSEC3”的部分,直到第一行不以空格字符开头。结果
_adsp TXT "dkim=all"
$TTL 1800
在示例中。我尝试了
sed'/^[^\s].\sNSEC3\s/,/^[^\s]/d;'文件名
但这并不像预期的那样有效,示例结果是
_adsp TXT "dkim=all"
H3l26qmtkuiFZCeSYCCAo5krFE3gjM0I8UeQ9jhj3STy
X6fM0YizCHEuv4VZynOJGJc1XJnHRHI+p7yLlZ+OVseK
UfIkPVP+VOmlerwozEpM+Tnt8evwnMTDbcn0zxf/6YJx
kZeO2AszWkRZ0bctqW7INYo8YuyyuTSxSr8se27fiaPA
4GXQymepGgv/JGqargzHbyhhkDhENmNo7Qwkjl+a0kI4
6qqKcEWCsDvnlYUQiDFzc5oRs2j7TT9uybTfwUDQxV+t
MQFMhzu7LNbRIUuOb16sAEGSdl9mWQ4sZRJ9wuXJWbso
G+3tY0pBbq4ffScz/JKcrJ0qAuBF1F5JcQ== )
$TTL 1800
那么,恢复打印还太早吗
我错过了什么
多谢各位
附言:
您可能会看到我想做的是将DNSSEC部件从命名区域中移除。尚未找到任何其他方法删除RRSIG和NSEC3条目。如果有人有想法,我也会很感激。
[\s]
匹配一个文本\
或s
字符。它与空格不匹配
/^[^\s]/d
(如果[\s]
可以像您预期的那样工作)还将包括删除最后一行的非前导空格。我想你必须手动循环
在您给出的示例中,以下内容似乎有效:
sed -n '/^[^ \t].*\sNSEC3\s/{ :a; n; /^[^ \t]/bb; ba}; :b; p'
这可能适用于您(GNU-sed):
使用-n
选项关闭隐式打印
扔掉以非空格开头并包含字符串NSEC
的行与任何不以非空格开头的行之间的行
打印所有其他行
备选方案:
sed '/^\S.*NSEC/,/^\S/{/^\S.*NSEC\|^\s/d}' file
sed '/^\S.*NSEC/{:a;N;/\n\S/!ba;s/.*\n//}' file
还有另一种选择:
sed '/^\S.*NSEC/,/^\S/{/^\S.*NSEC\|^\s/d}' file
sed '/^\S.*NSEC/{:a;N;/\n\S/!ba;s/.*\n//}' file
还有一个:
sed '/^\S.*NSEC/{:a;N;/\n\S/!s/\n//;ta;D}' file
注意:前两种解决方案将删除行,而不考虑在删除结束时划一条线。而最后两种解决方案仅在删除结束时有一条线划界时才会删除行。
[\s]
与[s]
匹配。还有/^[^\s]/d
将删除$TTL1800
行。为什么OP会删除几行?因为[\s]
匹配s
<代码>/^[^\s].*\sNSEC3\s/-匹配不以\或s开头且具有NSEC3
的行。所以基本上[^\s]
匹配一个空格。当然!我忘了看另一面