特定の単語にファイル名のプレフィックスを印刷します。

特定の単語にファイル名のプレフィックスを印刷します。

以下のファイル名がありますが、その前にファイル名を印刷したいと思います.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より前)。

関連情報