次の文字列があります:
onetwothree.file.001.txt ; threefourfive.file.0.98.txt ; fivefoursix.file.14.txt
これを分割し.
、;
ファイル名の前のプレフィックスを削除すると、次のようになります。
file.001.txt ; file.0.98.txt ; file.14.txt
何か案は?
答え1
sed -e 's/[^.]*.//' -e 's/;[^.]*./; /g'
.
これは最初に先頭からまでの最短の部分文字列を削除し、;
結果の文字列に対して を操作できます。
答え2
撮影「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
答え3
または、sed
...
s="onetwothree.file.001.txt ; threefourfive.file.0.98.txt ; fivefoursix.file.14.txt"
sed -E "s/(^|; )[^\.]+\./\1/g" <<<$s
ウォークスルー
(^|; )[^\.]+\.
行の先頭または^
(セミコロンとスペース)|
で始まり、リテラルを含まないが、;
[^\.]+\.
.
する文字通り終わる.
そして、そのすべてを\1
キャプチャグループに置き換えます(^|; )
出力
file.001.txt ; file.0.98.txt ; file.14.txt