特定の数を超える特殊文字を含む行を見つける方法

特定の数を超える特殊文字を含む行を見つける方法

特定の数以上の特殊文字を含むテキストで行をキャッチする最善の方法は何ですか?

各行に4つのカンマがあることをすでに知っていて、,4つ以上のカンマを含む行を探したいとしましょう。,

はい

hi,hello,how,are,you
catch,me,then,say,hello,then

出力

catch,me,then,say,hello,then

答え1

Perlソリューション:

perl -ne 'print if tr/,// > 4'
  • -nファイルを1行ずつ読み込む
  • これtr演算子一致する数を返します。

4行未満で印刷するには、>に変更するだけです<

答え2

使用grepコマンド:

grep -E '(,.*){5}' myfile

タスクを実行します。説明する:

-E:拡張正規表現を使用してください...

'(,.*):...カンマの後に任意の数の文字(ゼロを含む)が続くものを探します...

{5}':...そして前のパターンを5回繰り返します。

カンマが4行未満の行を見つけるには、次のものが必要です。

grep -xE '([^,]*,){0,3}[^,]*' myfile

今回は、-xライン全体と一致するように、パターンをラインの先頭と最後に固定する必要があります。[^,]*代わりに使用してください。.*それ以外の場合は、後者が,sを含む文字列を一致.で幸せに一致させます。どの特徴。

-v別のアプローチは、以前のアプローチとは反対です。 「4未満」対いいえ「少なくとも4つ」なので、次のようになります。

grep -vE '(,.*){4}' myfile

答え3

バージョンawk:

awk -F, 'NF > 5' myfile

答え4

次の行で得られた結果


l=`awk 'BEGIN{print }{print gsub(",","")}' example.txt |sed '/^$/d' |awk '$1 > 4 {print NR}'`;sed -n ''$l'p' example.txt  

output
catch,me,then,say,hello,then

関連情報