同様の質問を見つけました:
しかし、この場合、合計の長さではなく、行の桁数を確認したいと思います。たとえば、次の入力から:
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
という事実を利用することです。たとえば、 を取ると、次のようにすることができます。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
が印刷されます。