特定の数以上の特殊文字を含むテキストで行をキャッチする最善の方法は何ですか?
各行に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