1

説明:以下のように、1 行の awk コマンドを使用して、シェル スクリプト内の一致した行の後のすべての行を出力します。

#!/bin/bash
...
awk "f;/${PATTERN}/{f=1}" ${FILE}

${PATTERN} には特殊文字が含まれている可能性があるため、この場合、cmd は失敗します。

Q1. awkで正規表現が使用されている場合、このような状況をどのように処理すればよいですか?

Q2. 特殊文字の問題を回避するために、正規表現の代わりにこのコマンドで生の文字列を使用することは可能ですか?たとえば/$PATTERN/ですか?

4

1 に答える 1

8

近い。シェル変数を-vawk スクリプトに直接配置するよりも、awk に渡す方が適切です。

awk -v pat="${PATTERN}" 'f; $0 ~ pat {f=1}' "${FILE}"

が正規表現でない場合${PATTERN}は、別の演算子を使用できます。

awk -v pat="${PATTERN}" 'f; $0 == pat {f=1}' "${FILE}"

または、非正規表現の部分文字列を処理することもできます:

awk -v pat="${PATTERN}" 'f; index($0, pat) {f=1}' "${FILE}"
于 2012-08-10T11:22:30.707 に答える