私は次のawkステートメントを持っています
awk '/^string$/{i=1;next} i && i++ <= 2' file
その後、文字列を検索して2行を印刷します。
例えば
$ cat file
string
aaa
bbb
ccc
$ awk '/^string$/{i=1;next} i && i++ <= 2' file
$ bbb
私がしたいのは、2をカウンタに変更して毎回10行を繰り返すことです。例えば
for i in {1..5}
do
awk '/^111$/{i=1;next} i && i++ <= $i' file
done
もちろんこれはうまくいきません。コマンドがループにカプセル化されているため、可能であるかどうかはわかりません。
ちなみに、私がやりたいことは、設定ファイル(file.cfg)の[header]値を調べて、その変数が有効になっているか(変数=有効にする)ことです。
例えば
cat file.cfg
[header]
# nothing
variable = enabled
私の考えでは、コア属性は[header]が決定されていない行(おそらく1行目、おそらく122行目)にあることです。
そして、変数が常に[header]の後ろの2行目にあるわけではありません。一部の人は変数を7桁に置くことも、他の人は2桁に配置することもできます。
これが意味があることを願っております。
ベストアンサー1
[header]
構成ファイルを 1 行ずつ作成した場合は、以下を使用variable=value
して特定のセクションのすべての値を取得できます。
sed -n '/^\[header\]/,/^\[/p' /path/to/file.cfg|grep -vE '?\s?[;#]'
このセクションでは、対応する文字で始まり、次の行までのすべてのsed
行をフィルタリングします。このコマンドは、またはで始まる行をフィルタリングします。[header]
[
grep
;
#
代わりにsedを使用できますawk
。質問に対する以前の回答に基づいてhttps://stackoverflow.com/questions/17988756/how-to-select-lines-Between-two-marker-patterns-which-may-occurr-multiple-times-w:
awk '/\[header\]/{print; flag=1; next}/\[/{flag=0}flag' file.cfg
grep
コメント行をフィルタリングするには、上記のコマンドを追加します。