こんにちは。現在、次のコードを実行しようとしています。 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文字に置き換え、終了する前に結果を端末に印刷します。