[英]Get all strings after the 4th occurrence of the pattern is found in bash
以類似以下的字符串開頭:
String=1973251922:197325192278:abcdefgh:0xfff689990:Searching done for the string:SUCCESS.
需要一個正則表達式,用於匹配第四個冒號“:”之后的所有字符串,並將其分配給shell腳本中的變量,例如:
var_result="Searching done for the string:SUCCESS."
$ string="1973251922:197325192278:abcdefgh:0xfff689990:Searching done for the string:SUCCESS."
$ echo "${string#*:*:*:*:}"
Searching done for the string:SUCCESS.
${string#*:*:*:*:}
是前綴刪除的示例。 它刪除由四個冒號分隔的字符串組成的前綴。
輸出可以保存在shell變量中:
$ var_result=${string#*:*:*:*:}
$ echo "$var_result"
Searching done for the string:SUCCESS.
cut
為此:
$ string="1973251922:197325192278:abcdefgh:0xfff689990:Searching done for the string:SUCCESS."
$ cut -d: -f 5- <<<"$string"
Searching done for the string:SUCCESS.
上面選擇了第五個字段和所有后續字段,其中所有字段之間都用冒號分隔。 更具體地說, -d:
告訴cut
使用:
作為字段分隔符, -f 5-
告訴它選擇字段5及其之后的所有內容。
要將輸出保存在變量中,我們使用命令替換 :
$ var_result=$(cut -d: -f 5- <<<"$var")
$ echo "$var_result"
Searching done for the string:SUCCESS.
如果您只有POSIX Shell,而沒有bash,則需要使用echo
:
$ var_result=$(echo "$var" | cut -d: -f 5-)
$ echo "$var_result"
Searching done for the string:SUCCESS.
或者,更安全的是printf
:
$ var_result=$(printf "%s" "$var" | cut -d: -f 5-)
$ echo "$var_result"
Searching done for the string:SUCCESS.
以下使用sed刪除冒號定義的前四個字段:
$ sed -E 's/([^:]*:){4}//' <<<"$string"
Searching done for the string:SUCCESS.
進一步來說:
[^:]
匹配除:
以外的任何字符。
[^:]*:
匹配任意數量的非冒號,后跟冒號。
([^:]*:){4}
完全匹配四個冒號分隔的字段。
s/([^:]*:){4}//
是一個替代命令,該命令查找前四個用冒號分隔的列,並將它們替換為空字符串。
以下是相同的,但是將結果保存在變量中:
$ var_result=$(sed -E 's/([^:]*:){4}//' <<<"$string")
$ echo "$var_result"
Searching done for the string:SUCCESS.
以下是相同的,但對於POSIX shell也有好處:
$ var_result=$(printf '%s' "$var" | sed -E 's/([^:]*:){4}//')
$ echo "$var_result"
Searching done for the string:SUCCESS.
以下解決方案可能對您有所幫助。 假設以下是變量的值:
var="1973251922:197325192278:abcdefgh:0xfff689990:Searching done for the string:SUCCESS."
echo "$var"
1973251922:197325192278:abcdefgh:0xfff689990:Searching done for the string:SUCCESS.
echo "$var" | awk -F":" '{$1=$2=$3=$4="";sub(/^:+/,"");print $0}' OFS=":"
Searching done for the string:SUCCESS.
使用bash regex,您可以說:
String="1973251922:197325192278:abcdefgh:0xfff689990:Searching done for the string:SUCCESS."
if [[ $String =~ ^([^:]*:){4}(.+)$ ]]; then
echo ${BASH_REMATCH[2]}
fi
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.