特定の文字数を超えるテキストファイルから行を削除する方法は?
例:このテキストファイルでは:
a;dskjshdkjhgsdlhb5451candsncas;ldjch;sdkjncl
zdkcjsd#c
adsaskad@#s;l35684ad;sjdikm;
;okjilh@j
oieoigsb53454kdsjhcyavscjbkajlknscm;la,
8文字の文字と8文字のみを含むすべての行をコマンドラインを使用して自動的に削除する方法は?ある種のテキストファイルがあり、その中に8つ(文字と文字)を含む行だけを削除したいので、この質問をさせていただきます(すべてのファイル間で同様の行で同じ文字と文字を持ちます)。
答え1
努力する
awk 'length($0) == 8 ' old_file > new_file
-== 8
または を使用して!= 8
等しいか等しくないかを示します。
答え2
grep -vEx '.{8}'
または:
awk 'length != 8'
入力に有効な文字を形成しないバイトシーケンスが含まれている場合は、潜在的な問題に注意してください。
GNUの場合、awk
これらのバイトは返された値に追加されませんlength
。 GNUの場合、grep
これらのバイトシーケンスを含む行は一致しないため、.{8}
この行は-v
返されます。そうでなければバイナリファイル(標準入力)一致情報。 GNUを使用すると、同様の問題に直面しますsed
。
答え3
を使用して任意の文字を一致させ、sed
正確に8つの文字に一致するように指示します。行の先頭から一致するという意味、行の最後まで一致するという意味、行を削除するという意味です。.
\{8\}
^
$
d
sed '/^.\{8\}$/d' file > newfile
または、既存のファイルを変更するにはGNUを使用してくださいsed
。
sed -i '/^.\{8\}$/d' file
空行も削除したい場合は、-e
同じコマンドに複数の式を入れることができます。
sed -i -e '/^.\{8\}$/d' -e '/^$/d'