変数内に格納された文字列に対してコマンドを実行できますか?

変数内に格納された文字列に対してコマンドを実行できますか?

こんにちは。現在、次のコードを実行しようとしています。 YYYY / MM / DD形式でDATE変数に文字列が格納されています。 cutコマンドを使用して年を抽出しようとしています。ファイルやディレクトリではないというエラーが発生します。変更したり、他のアプローチを取ることができますか?

for file in ~/filesToSort/*
do

   DATE=$(head -1 $file | tr "-" "/")
   echo "${DATE}"
   YYYY=$(cut -c1-4 accounts $DATE)
   #echo "${YYYY}"
done

ありがとう

ベストアンサー1

このcutユーティリティは標準入力ストリームからデータを読み込みます。引数として指定された文字列では機能しません。

したがって、を使用するには、cut標準入力にデータを渡す必要があります。

YYYY=$( printf '%s\n' "$DATE" | cut -d '/' -f 1 )

しかし、これはループで非常に遅いです。代わりに、組み込みパラメータ置換を使用して、文字列/の最初のパラメータ以降のすべての項目を削除してください$DATE

YYYY=${DATE%%/*}

$DATEこれにより、シェルパターンに一致する最も長いサフィックス文字列が削除されます/*。文字列がある場合に2021/10/21返されます2021

ディレクトリ内の各ファイルの最初の4文字を取得します(これは私の本質です)。信じる現在のコードでこれを実行しようとしています。sed次のように使用できます。

for name in "$HOME"/filesToSort/*; do
    sed -e 's/\(....\).*/\1/' -e q "$name"
done

これは各ファイルの最初の行を読み取り、行の内容を行の最初の4文字に置き換え、終了する前に結果を端末に印刷します。

おすすめ記事