Bash

在bash中按多個分隔符拆分字元串

  • March 17, 2020

有一個字元串:

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

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