タイトルにあるタスクについて質問があります。 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 pattern
sed '/pattern/!d'
POSIX sedはBREだけを理解していますが、いつでも次のように書くことができます。
sed '/^\([^x]*x\)\{3\}[^x]*$/!d'
そしてawk
:
awk -F x 'NF == 4'