質問: 以下のようなリストがパイプで渡ってきます。 ``` memo.txt file01 photo.jpg file02 icon.png file03 video.mp4 file04 ``` これを、以下のようにして次のパイプに渡したいです。 各行で、1つめの文字列から拡張子を抜き出し、2つめの文字列の末尾に付けたいのです。 ``` memo.txt file01.txt photo.jpg file02.jpg icon.png file03.png video.mp4 file04.mp4 ``` `awk` の `match` を使ってどうにかしてみようと思いましたが、ややこしくて分からなくなってしまいました。 お力をお貸しいただければ幸いです。
回答: 条件が不明なので、一応こちらで条件を決めてやってみました。 条件にによっては正規表現等を変更する必要があります。 ・ファイル名は英数字だけで構成されている。 ・左側のファイル名には必ず拡張子が付いている。 ・sedで「-r」オプションを使っているのでMacに最初から入ってるsedでは動かないと思います。 ``` $ cat t.txt memo.txt file01 photo.jpg file02 icon.png file03 video.mp4 file04 $ cat t.txt | sed -r -e 's/^([A-Za-z0-9]+)(\.[A-Za-z0-9]+)( .*)$/\1\2\3\2/' memo.txt file01.txt photo.jpg file02.jpg icon.png file03.png video.mp4 file04.mp4 ``` ※追記 英数字以外のファイル名に対応してみました。 ``` $ cat t.txt memo.txt file01 photo.jpg file02 icon.png file03 video.mp4 file04 マニュアル.doc file05 マニュアル.分類1.doc file06 $ cat t.txt | sed -r -e 's/^([^ ]+)(\.[^ \.]+)( .*)$/\1\2\3\2/' memo.txt file01.txt photo.jpg file02.jpg icon.png file03.png video.mp4 file04.mp4 マニュアル.doc file05.doc マニュアル.分類1.doc file06.doc ```