![](/img/trans.png)
[英]How to search for a string in a line, then delete to end of line from there
[英]How to search and delete a pattern from a line?
我需要編寫一個帶有文本行的簡單 bash 腳本
some-pattern something-else
並擦除一些模式並僅返回其他內容。 我寫了一個腳本來用 grep -o 做相反的事情,但我不知道如何處理這種情況。 很感謝任何形式的幫助。
樣本輸入:
"SNMPv2::sysLocation.0 = STRING: someLocation"
期望輸出:
"someLocation"
考慮到"
不在您的示例 Input_file 和預期輸出中,您能否嘗試使用 GNU grep
跟隨。
grep -oP '.*STRING: \K(.*)' Input_file
someLocation
對於\\K
解釋:
\\K 是正則表達式語法的 PCRE 擴展,在該點之前丟棄內容,使其不包含在匹配輸出中
您可以使用sed
刪除您要保留的內容前面的部分。
鑒於:
$ echo "$s"
"SNMPv2::sysLocation.0 = STRING: someLocation"
你可以做:
$ echo "$s" | sed -nE 's/^.*(someLocation)/\1/p'
someLocation
如果你想添加引號:
$ echo "$s" | sed -nE 's/^.*(someLocation)/"\1"/p'
"someLocation"
如果STRING:
之后的部分是可變的,而不是固定的,則可以使用STRING:
和捕獲錨點:
$ echo "$s" | sed -nE 's/^.*STRING:[[:space:]]*(.*)/"\1"/p'
"someLocation"
或者, sed
捕獲並打印最后一個空格后的最后一個單詞:
$ echo "$s" | sed -nE 's/([^[:space:]]*$)/\1/p'
如果最后一個單詞與其他字段有空格,您也可以使用awk
:
$ echo "$s" | awk '{print $NF}'
或者帶有cut
和rev
的管道也可以工作:
$ echo "$s" | rev | cut -d' ' -f 1 | rev
您可以使用: echo ${STRING} | awk -F" " '/someLocation/ { print $NF }'
echo ${STRING} | awk -F" " '/someLocation/ { print $NF }'
-F
將使用空格(由雙引號表示,它們之間有空格)作為分隔符; /someLocation/
將搜索您的位置; { print $NF }
將顯示字符串的最后一部分(我相信這是 location 所在的地方。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.