可変長ファイル名の接頭辞を取得したいと思います。
In: some_filename_123-uniq.tar.gz
Out: some_filename_123
In: some_filename_1-uniq.tar.gz
Out: some_filename_1
これは私が望むものとは正反対です-uniq.tar.gz
。
result=$(echo *-uniq.tar.gz | rev | cut -c-12 | rev)
echo $result
-uniq.tar.gz
サフィックスが付いた項目は1つだけです。
最も簡単な方法のように見えるパラメータ置換を試しましたが、構文エラーが発生しました。
${"some_filename_123-uniq.tar.gz"//"-uniq.tar.gz"}
bash: ${"some_filename_123-uniq.tar.gz"/""/"-uniq.tar.gz"}: bad substitution
答え1
最も簡単な方法のようなパラメータ置換を試してみました。
それはい最も簡単な方法(名前が示すように、コメントで指摘したように、シェルは拡張パラメータ/変数); (最後まで)サフィックスを削除する
場合${var%-*}
(この場合は最後のものから始まります-
):
for f in ./*-uniq.tar.gz
do
printf %s\\n "${f%-*}"
done
または${var:offset:length}
最後のものを削除してください窒素文字(ここで長さ負の整数です):
for f in ./*-uniq.tar.gz
do
printf %s\\n "${f:0:-12}"
done
答え2
迅速で汚い方法は次のとおりです。 sedを使用して、文字列を何もないものに置き換えます(削除)。
for i in *-uniq.tar.gz
do
result=$(echo $i | sed 's/-uniq.tar.gz$//')
echo "$result"
done
上記のコードは、ディレクトリを繰り返しながら -uniq.tar.gz で終わるすべてのエントリを検索し、末尾の部分を削除して結果を表示します。