标题应该是:Remove all lines between two similar patterns, including the line of the starting pattern. if another specific pattern in between is not matched
。我把它写得更短,因为它对于其他在谷歌上搜索答案的人来说更容易阅读。
关于问题:我有一个特定计算机的可上市股票和不可上市股票的列表。我想创建一个包含可列出共享的所有计算机的列表,并删除其不可读的共享。但我遇到了两个问题。首先,正确删除两个相似图案之间的所有线条。其次,如果发现特定模式,如何不删除两个相似单词之间的行。
我的输入是
Shares for DED-SHD-ED-5:
[--- Unreadable Shares ---]
ADMIN$
C$
E$
H$
IPC$
Shares for DED-SHD-ED-6:
[--- Unreadable Shares ---]
ADMIN$
C$
IPC$
[--- Listable Shares ---]
print$
Shares for DED-SHD-ED-7:
[--- Unreadable Shares ---]
ADMIN$
C$
IPC$
[--- Listable Shares ---]
backup backup2
Shares for DED-SHD-ED-8:
[--- Unreadable Shares ---]
ADMIN$
C$
IPC$
Shares for DED-SHD-ED-9:
[--- Unreadable Shares ---]
ADMIN$
C$
IPC$
VBRCatalog
[--- Listable Shares ---]
backup backup2
我设法使用以下命令删除所有不可读的共享awk '/Listable Shares/,/Shares for/' input.txt
,该命令的问题是DED-SHD-ED-8
没有Listable Shares
。它会剥离下面的计算机,我将看到atDED-SHD-ED-9
的可上市股票DED-SHD-ED-9
DED-SHD-ED-8
请参阅下面的输出(我知道列表中第一台计算机的名称丢失,但这对我来说不是问题)
[--- Listable Shares ---]
print$
Shares for DED-SHD-ED-7:
[--- Listable Shares ---]
backup backup2
Shares for DED-SHD-ED-8:
[--- Listable Shares ---]
backup backup2
为了解决这个问题,我的想法是在运行之前剥离所有没有可列表共享的计算机awk '/Listable Shares/,/Shares for/' input.txt
。起初,我尝试删除“Shares for”和“Shares for”之间的所有行。我在论坛上环顾四周,试图做出更简单的答案,并避免使用复杂的答案,因为它们目前超出了我的理解范围。例如,我使用了这个命令sed '/^Shares for/,/^Shares for/{//!d;};' input.txt
,sed '/Shares for/,/:/{//!d;};' input2.txt
在这里它删除了计算机之间的一半线路。
输出
Shares for DED-SHD-ED-5:
Shares for DED-SHD-ED-6:
[--- Unreadable Shares ---]
ADMIN$
C$
IPC$
[--- Listable Shares ---]
print$
Shares for DED-SHD-ED-7:
Shares for DED-SHD-ED-8:
[--- Unreadable Shares ---]
ADMIN$
C$
IPC$
为什么它只删除一半计算机的数据?我不明白为什么
我的下一个想法是在命令中添加一个排除,如果模式Listable
在这些行中匹配,则不删除“Shares for”和“Shares for”之间的行。然后删除没有数据的计算机,如DED-SHD-ED-5
和DED-SHD-ED-7
。但也许这不是最好的方法。也许最好删除第一个模式的行,因为看不到模式“Listable”。
我希望得到一些帮助和见解,如何正确处理这一切。
预期输出:
Shares for DED-SHD-ED-6:
[--- Unreadable Shares ---]
ADMIN$
C$
IPC$
[--- Listable Shares ---]
print$
Shares for DED-SHD-ED-7:
[--- Unreadable Shares ---]
ADMIN$
C$
IPC$
[--- Listable Shares ---]
backup backup2
Shares for DED-SHD-ED-9:
[--- Unreadable Shares ---]
ADMIN$
C$
IPC$
VBRCatalog
[--- Listable Shares ---]
backup backup2