SED - 3つの「x」記号を含む行を表示します。

SED - 3つの「x」記号を含む行を表示します。

タイトルにあるタスクについて質問があります。 SEDでは、3つの「x」記号を含む行を表示する必要があります。

1つのフラグで実行する方法を知っていますが、3つのフラグに対して機能するコマンドを作成することはできません。

入力例:

   blaxblax 
   xxox
   xxx23
   0x1a
   xxxx

出力:

   xxox
   xxx23

答え1

ここでやるべきことは、一致する正規表現を作成することです。

  • 行の先頭から始まり(0個以上の「x」以外の文字と「x」が続きます)3回
  • 行が終わるまで、「x」以外の文字が0個以上出てきます。

sedを使用すると作成できます(GNU sedを想定)

sed -rn '/^([^x]*x){3}[^x]*$/p'

答え2

短いGNUawk方法:

awk -v FPAT='x' 'NF==3' file
  • FPAT- フィールド値のパターン定義
  • NF- 合計フィールド数(この場合 -x文字発生数)

出力:

xxox
xxx23

答え3

sed -n '/x\{2,3\}/p' test.txt |sed '/x\{4,\}/d'

出力:

xxox
xxx23

答え4

別のGNUsedアプローチ

sed -n 's/x/x/3;T;s/x/x/4;t;p'

POSIXlyでは、次のものを使用できます。以下をgrep行う必要はありませんsed

grep -Ex '([^x]*x){3}[^x]*'

grep patternsed '/pattern/!d'POSIX sedはBREだけを理解していますが、いつでも次のように書くことができます。

sed '/^\([^x]*x\)\{3\}[^x]*$/!d'

そしてawk

awk -F x 'NF == 4'

関連情報