0

我有一些命令列表,其中一些具有在执行它们之前需要跳过的参数。

  • 显示 abc(h2) xyz
  • 显示 abc(h2) xyz opq(h1)
  • 显示 abc(h2) xyz <32>
  • 显示 abc(a,l) xyz [<32>] opq
  • 显示美国广播公司

最终,列表具有 ( )、<>、[] 与纯文本命令的不同组合。我想将所有其他命令与“show abc”等普通命令分开。

命令需要处理:-

(h1), (h2), (a,l) are to be discarded
<32> - is to be replaced with any ip address
[<32>] - is to be replaced with any integer digit

我尝试了以下但结果文件为空:-

cat show-cmd.txt | grep "<|(|[" > hard-cmd.txt

如何使用正则表达式获取没有普通命令的结果文件?

所需的输出文件:-

show abc xyz
show abc xyz opq
show abc xyz 1.1.1.1
show abc xyz 2 opq
4

2 回答 2

1

尝试使用grep后跟sed

grep '[(<\[]' file | sed -e 's/\[<32>\]/2/g' -e 's/<32>/1.1.1.1/g' -e 's/([^)]*)//g'

输出:

show abc xyz
show abc xyz opq
show abc xyz 1.1.1.1
show abc xyz 2 opq

请注意,命令顺序s///g在您的情况下很重要。

也尽量避免重复使用cat

于 2013-10-16T06:59:20.690 回答
0
cat show-cmd.txt | grep "[\[\(\<]" > hard-cmd.txt

这应该有效。左方括号和右方括号 [] 意味着只需要存在一个选项。然后,您要搜索的其他括号由 . 提供并转义。

希望这可以帮助。讲义

于 2013-10-16T06:31:40.267 回答