x個以下の数字を含む行のみ保存します。TXTファイル

x個以下の数字を含む行のみ保存します。TXTファイル

同様の質問を見つけました:

しかし、この場合、合計の長さではなく、行の桁数を確認したいと思います。たとえば、次の入力から:

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という事実を利用することです。たとえば、 を取ると、次のようにすることができます。trN = 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

例えば文字列内の一致数をカウントする Perl ショートカットはありますか?

答え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が印刷されます。

関連情報