ディレクトリ内の特定のファイル名から特定の値を抽出する必要がありますが、抽出された値を変数に保持するコマンドを使用したいと思います。私のファイルの形式が次のようになり、place.type-date.log
それを抽出してという変数に保存したいとしますfirst
。どうすればいいですか?
使ってみよう
first=$($file | awk -F'[.-]' '{print $1}')
しかし、成功しませんでした。
普通私がしたら
echo " place.type-date.log" | awk -F'[.-]' '{print $1}'
結果はになります。 forループを使用して特定のディレクトリ内の複数のファイルに対してこれを行う必要があるため、コマンドをにplace
置き換えました。place.type-date.log
$file
place
抽出された値を変数に保存したいので、first
extractコマンドを変数と同じにしましたfirst
。したがって、スクリプトを実行しようとするとecho first
何も表示されません。これは、抽出された値がまだ変数に保存されていないことを意味します。
答え1
place.type-date.log
このような変数にファイル名があり、他の変数file
の最初のドットの前にファイル名部分を保存したいとしますfirst
。この場合、標準パラメータ置換を使用してこれを実行できます。
first=${file%%.*}
上記は、.*
値からシェルパターンに一致する最も長いサフィックスを削除し、$file
結果をfirst
。
%
代わりにを使用すると、%%
最も短い一致サフィックスが削除され、代わりにorをplace.type-date
使用するとサフィックス文字列は削除されますが、サフィックス文字列は削除されません。#
##
%
%%
これらの代替を使用する別の例については、次を参照してください。私の答え到着前の質問。
$file
あなたのコードはコマンドではなく文字列なので動作しませんplace.type-date.log
。あなたは次のようなことを試したかもしれません
first=$( echo "$file" | awk -F '[.-]' '{ print $1 }' )
しかし、これは必要以上に複雑です。また、ファイル名(echo
拡張可能)のエスケープシーケンスと改行文字を含むファイル名(行awk
ベースのテキスト処理ツール)にもいくつかの問題があります。