簡體   English   中英

如何從一行中搜索和刪除模式?

[英]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}'

或者帶有cutrev的管道也可以工作:

$ 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM