Bash

通過第一次出現的分隔符拆分字元串

  • October 5, 2018

我有一個下一個格式的字元串

id;some text here with possible ; inside

並希望通過第一次出現 . 將其拆分為 2 個字元串;。所以,它應該是:idsome text here with possible ; inside

我知道如何拆分字元串(例如,用cut -d ';' -f1),但它會拆分為更多部分,因為我;在左側部分內。

cut聽起來像是一個合適的工具:

bash-4.2$ s='id;some text here with possible ; inside'

bash-4.2$ id="$( cut -d ';' -f 1 <<< "$s" )"; echo "$id"
id

bash-4.2$ string="$( cut -d ';' -f 2- <<< "$s" )"; echo "$string"
some text here with possible ; inside

read更合適的是:

bash-4.2$ IFS=';' read -r id string <<< "$s"

bash-4.2$ echo "$id"
id

bash-4.2$ echo "$string"
some text here with possible ; inside

使用任何標準 sh(包括 bash):

sep=';'
case $s in
 (*"$sep"*)
   before=${s%%"$sep"*}
   after=${s#*"$sep"}
   ;;
 (*)
   before=$s
   after=
   ;;
esac

read``$sep基於解決方案的解決方案適用於除空格、製表符或換行符之外的單個字元(以及一些 shell,單字節)值,並且僅當$s不包含換行符時。

cut基於解決方案的解決方案僅在$s不包含換行符的情況下才有效。

sed可以設計解決方案來處理具有任何值的所有極端情況$sep,但是當外殼中有內置支持時,不值得走那麼遠。

引用自:https://unix.stackexchange.com/questions/53310