以下のファイル名がありますが、その前にファイル名を印刷したいと思います.tar
。どうすればいいですか?
注:後部.tar
は固定されており、前部.tar
は可変です。
例:abcd_ef_1.2.3.12+all.tar.gz.md5sum
答え1
たとえば、sedを使用すると、次のようになります。
sed -E 's/(.*)\.tar.*/\1/' <<< "abcd_ef_1.2.3.12+all.tar.gz.md5sum"
印刷abcd_ef_1.2.3.12+all
。
答え2
$ basename -s .tar.gz.md5sum 'abcd_ef_1.2.3.12+all.tar.gz.md5sum'
abcd_ef_1.2.3.12+all
そしてパラメータ拡張
$ s='abcd_ef_1.2.3.12+all.tar.gz.md5sum'
$ echo "${s%.tar*}"
abcd_ef_1.2.3.12+all
答え3
たぶん find と sed を組み合わせるのでしょうか?
find . -maxdepth 1 -name "*.tar*" | sed 's/\(.*\)\(\.tar.*\)/\1/g'
説明:sedの最初の部分
\(.*\)\(\.tar.*\)
tarを見つけましたが、2つのグループを提供しました。 .tarの前の1、tarの後の1
sedの2番目の部分
\1
最初のグループのみを選択してください(.tarより前)。