ファイル名から日付を取得したいです。この機能は、次のコードを使用して実装できます。
for filename in OH/*
do
echo $filename |grep -Eo '[[:digit:]]{14}'
done;
ここで、結果を次の変数に保存したいと思います。
for filename in OH/*
do
result=$($filename |grep -Eo '[[:digit:]]{14}')
echo $result
done;
ただし、2つの空白行を印刷します。私はそこから何を逃していますか?
答え1
あなたはあきらめますecho
:
for filename in OH/*
do
result=$(echo $filename | grep -Eo '[[:digit:]]{14}')
echo "$result"
done;
またはもっと良いこと、
for filename in OH/*
do
result=$(printf %s "$filename" |grep -Eo '[[:digit:]]{14}')
echo "$result"
done;
または
for filename in OH/*
do
result=$(grep -Eo '[[:digit:]]{14}' <<<"$filename")
echo "$result"
done;
答え2
コマンド実行拡張に欠落とエコーがありますが、printfを使用する方が良いでしょう。
result=$(echo "$filename" | grep -Eo '[[:digit:]]{14}')
result=$(printf '%s' "$filename" | grep -Eo '[[:digit:]]{14}')
もちろん、ファイルがgrep正規表現と一致しない場合、結果はNULLになる可能性があり、これをテストする必要があります。
#!/bin/bash
for filename in OH/*
do
result=$(printf '%s' "$filename" | grep -Eo '[[:digit:]]{14}')
[ "$result" ] && echo "$result"
done;