Bash
在bash中按多個分隔符拆分字元串
有一個字元串:
onetwothree.file.001.txt ; threefourfive.file.0.98.txt ; fivefoursix.file.14.txt
我想將其拆分
.
並;
刪除文件名之前的前綴,使其看起來像這樣:file.001.txt ; file.0.98.txt ; file.14.txt
有任何想法嗎?
sed -e 's/[^.]*.//' -e 's/;[^.]*./; /g'
這最初會從頭開始刪除最短的子字元串
.
,然後可以依靠對;
結果字元串進行操作。
從字面上看*“in bash”*,你可以做這樣的事情。
- 將字元串拆分為一個數組,用分號分隔
- 按元素刪除前綴並將結果儲存在字元串中,由 IFS 的第一個字元分隔
- 在分隔符後面全域添加空格
注意:您可能希望保存目前
IFS
,以便以後可以恢復它。IFS=";" read -a arr <<< "onetwothree.file.001.txt ; threefourfive.file.0.98.txt ; fivefoursix.file.14.txt" printf -v str "${arr[*]#*.}" printf "%s\n" "${str//;/; }"
軋花
file.001.txt ; file.0.98.txt ; file.14.txt