リダイレクトを介して入力ファイルのいくつかの指示を入力して実行するプログラムがあります。私の入力ファイルは次のとおりです。
alpha
5
2
run
7
quit
次に、次のように実行します。
myprogram < input_file
しかし、時には明確にするために入力ファイルにいくつかの説明を追加する必要があります。
# The name of value
alpha
# The acceleration
5
# The distance
2
run
7
quit
残念ながら、今はプログラムが無視されていないため、プログラムにリダイレクトできません。#
にリダイレクトする前に、これらのコメント行をどのように無視できますかmyprgram
?
答え1
grep
以下を使用して、「#」で始まる行をフィルタリングできます。
grep -v '^#' input_file | myprogram
渡される文字列はgrep
正規表現です。行の先頭( )と一致し、^
その後に#
。-v
このパターンと一致しない行が表示されるように、ロジックを逆に置き換えます。
通常、行内のデータを変更するには、grep
単に行全体を表示/削除することを選択します。sed
もちろん、このsed
ソリューションも効果があります。
答え2
プログラムにコメントを提供する前に、sedを使用してコメント付きの行をフィルタリングしてください。次の形式のいずれかを選択できます(ただし、すべてのシェルが2番目の形式であるプロセス置換をサポートするわけではありません)。
sed '/^#/d' input_file | myprogram
myprogram < <(sed '/^#/d' input_file)
/^#/
は、で始まるすべての行に一致する正規表現であり、出力#
からd
その行を削除するコマンドです。 (心配しないでください。input_file
修正されませんsed
。)