[英]Text Manipulation using sed or AWK
對服務運行腳本時,得到以下結果。 結果因服務而異,但下面顯示的文本模式相似。 我的腳本結果分配給var1。 我需要從該變量中提取數據
$var1=HOST1*prod*gem.dot*serviceList : svc1 HOST1*prod*kem.dot*serviceList : svc3, svc4 HOST1*prod*fen.dot*serviceList : svc5, svc6
我需要從$ var1中刪除服務列表的名稱。 因此,最終結果應打印在單獨的行上,如下所示:
svc1
svc2
svc3
svc4
svc5
svc6
你能幫忙嗎?
問候
使用gnu grep和gnu sed:
grep -oP ': *\K\w+(, \w+)?' <<< "$var1" | sed 's/, /\n/'
svc1
svc3
svc4
svc5
svc6
使用sed和grep:
sed 's/[^ ]* :\|,\|//g' <<< "$var1" | grep -o '[^ ]*'
sed刪除冒號和逗號之前的所有非空白。 Grep只是每行輸出一個結果服務。
grep
是完成這項工作的理想工具。
來自man grep
:
-o,--only-matching
僅打印匹配行的匹配(非空)部分,每個這樣的部分都在單獨的輸出行上。
聽起來很完美!
據我所知,這將適用於任何grep
:
echo "$var1" | grep -o 'svc[0-9]\+'
匹配“ svc”,后跟一個或多個數字。 您還可以通過-P
啟用“高度試驗性”的Perl regexp模式,這意味着您可以使用\\d
數字字符類,而不必再使用+
:
grep -Po 'svc\d+' <<<"$var1"
在bash
您可以使用<<<
( 此處為String )為標准輸入的grep
提供"$var1"
。
順便說一句,如果您的數據最初位於單獨的行中,例如:
HOST1*prod*gem.dot*serviceList : svc1
HOST1*prod*kem.dot*serviceList : svc3, svc4
HOST1*prod*fen.dot*serviceList : svc5, svc6
這對於awk
將是一件好工作:
awk -F': ' '{split($2,a,", "); for (i in a) print a[i]}'
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.