同様の質問を見つけました。
ところで、この場合、私が確認したいのは、全長ではなく、行の桁数です。たとえば、次の入力から:
cdc85e24-b9e9-8802-080a-b84479e1ae82
ekodeveloper0
1795475824.1129747.1472396049615.ref
1795475824.1129747.1472396049615
967175540.1194446.1472407271491
wangxiuyan552
jveazey
xoloki
whelee
matthauck
patel3.anirudh
mischa.salle
N桁以上の行をすべて削除する方法は?
答え1
質問にタグ付けしたので、Perlでこれを行う1つの方法は、Perlが置き換えられた文字数を返すという事実をperl
利用することです。たとえば、(taken)これを行うことができます。tr
N = 13
perl -ne 'print unless tr/[0-9]/[0-9]/ > 13' file
ekodeveloper0
wangxiuyan552
jveazey
xoloki
whelee
matthauck
patel3.anirudh
mischa.salle
おそらくより伝統的なアプローチは、スカラーコンテキストで正規表現マッチングを評価することによって数を得ることです。
perl -ne '$c = () = /\d/g; print unless $c > 13' file
答え2
Xまたはもっと数字。以下はXが13の例です。
sed -n 's/[0-9]/&/13p' input.txt > output.txt
ただし、逆に変更して実行できます。次の内容を含む行のみを保持するコマンドは次のとおりです。13未満数字:
sed -n -e 's/[0-9]/&/13;t' -e 'p' input.txt > output.txt
説明 - 13を超える数字を含む行のみを印刷します。
sed -n 's/[0-9]/&/13p' input.txt > output.txt
代替テキストの記号は、&
「一致するすべてのコンテンツ」を意味します。
コマンドの数値フラグs
(その/find/replace/
部分の後ろ)は、検索パターンの対応するインスタンスのみを置き換えることを意味します。
p
コマンドのフラグは、s
「代替が行われた場合に印刷」を意味します。
-n
もちろん、このスイッチはSedの基本的な「印刷」操作を抑制するためのものです。
説明 - 数字が 13 未満の行だけを印刷します。
sed -n -e 's/[0-9]/&/13;t' -e 'p' input.txt > output.txt
スイッチ-e
は「実行」です。ただコマンドを渡すだけです。私たちは複数の問題を経験しているので、ここで必要です。
最後のコマンドが置換を実行した場合、このt
コマンドは残りのコマンドをスキップします。s
コマンドp
印刷。