5

Awk では、範囲パターンは式ではないため、「!」は使用できません。そうではありません。それを実装する方法(awkを使用して一致する範囲パターンを除くすべてのコンテンツを印刷する)?

例えば

$cat 1.t

abd
hfdh
#  
fafa
deafa
123 
#
end

私が望んでいた結果:

猫 1.t

abd
hfdh
end

編集:

私は無礼な例を挙げました。私はこれをテストしていないので、endpattern は startpattern とは異なるはずです。それは私のせいです。

同時に、範囲パターンと範囲外パターンを別の方法で操作したいと考えています。したがって、sedは私の選択ではありません。

4

3 に答える 3

1

本当に を使用する必要がある場合はawk、次のようなものが機能するはずです。

awk 'BEGIN{x=1} /startpattern/{x=0} /endpattern/{x=1;next} x{print}'

別のsed方法はより単純なアプローチかもしれませんが (少なくともタイピングは少なくなります)。

編集: @Kent は、開始パターンと終了パターンが同じであるため、少しトリッキーになると指摘しましたが、これは機能するはずです。

awk 'BEGIN{x=1} /pattern/{x=!x;next} x{print}'

それは基本的xにパターンを見るたびにトグルし、x!=0. そこnextにある は、印刷をオンに戻すときにパターンの印刷を回避します。

于 2013-04-11T16:56:17.513 に答える