Bash
通過第一次出現的分隔符拆分字元串
我有一個下一個格式的字元串
id;some text here with possible ; inside
並希望通過第一次出現 . 將其拆分為 2 個字元串
;
。所以,它應該是:id
和some 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
,但是當外殼中有內置支持時,不值得走那麼遠。