"grep"出力の空のフィールドを文字列に置き換えます。

私は長いドキュメント(この長いファイルにはそれぞれ日付/時刻で始まるいくつかの段落が含まれています)を「grep」(1行ずつ読み取る)にwhileループを使用しています。

目的は、特定のフレーズを検索し、その横にあるその段落の日付/時刻を印刷またはエコーすることです。 grepがフレーズをキャプチャできないときに「NULL」文字をどのように「エコー」または「印刷」するのですか?たとえば、

ファイル(test.txt)に次の3つの段落があるとします。

 20170101,05:00 AM, I am using grep to read certain phrase1 in a long document. 
 20170102,09:30 AM, I am using grep to read certain phrase2 in a long document. 
 20170103,05:30 AM, I am using grep to read page in a long document. 

「一部の構文」と日付/時刻をエコーまたは印刷し、「一部の構文が利用できない場合」出力をNULLに置き換える方法なので、出力は次のようになります。

 20170101,05:00 AM,certain phrase1
 20170102,09:30 AM,certain phrase2
 20170103,05:30 AM,NULL
.
.
.

私は以下を使用します:

while read -r line; do
date=$(grep -c "201*")
phrase=$(grep  -Eo "certain phrase")

echo $date,$phrase
done < test.txt

ベストアンサー1

while read -r line; do
  date=$(grep -Eo  "201.{12}.M," <<< "$line")
  phrase=$(grep  -Eo "certain phrase" <<< "$line")
  echo "${date}${phrase:-NULL}"
done < test.txt

あなたはこの文を読んでいますが、それについて不思議ではありません。日付部分を計算する代わりに、最初のgrepの正規表現を調整しました-c。パズルの最後の部分は$ phrase変数を使用することです。パラメータ拡張NULL 値を「NULL」という単語に置き換えます。

おすすめ記事