リダイレクトされる特定の行を無視する方法

リダイレクトされる特定の行を無視する方法

リダイレクトを介して入力ファイルのいくつかの指示を入力して実行するプログラムがあります。私の入力ファイルは次のとおりです。

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。)

関連情報