2013-10-16 33 views
0

我有一些命令列表,其中一些參數在執行前需要跳過。使用正則表達式獲取命令列表

  • 顯示ABC(H2)的xyz
  • 顯示ABC(H2)的xyz OPQ(H1)
  • 顯示ABC(H2)的xyz < 32>
  • 顯示ABC(A,L)的xyz [< 32>] OPQ
  • 顯示ABC

最終,該列表具有與純文本的命令(),<>不同的組合,[]。 我想從「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 

回答

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

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

這應該工作。開始和結束方括號[]表示只有一個選項需要存在。然後提供您想要搜索的更多括號,並通過a進行轉義。

希望這會有所幫助。 Pulkit