テキストファイルから文字、数字、または記号が「x」より少ない行をすべて削除するにはどうすればよいですか?awk 'length($0)>'
スペースが含まれているため使用できません。
ベストアンサー1
n
グラフィック記号未満を含む行を削除するとします。
awk -v n=5 '{ line = $0; gsub("[^[:graph:]]", "") } length >= n { print line }'
一致しないすべての文字が削除されます[[:graph:]]
。残りの文字列の長さがより大きいか等しい場合は、n
(修正されていない)行を印刷します。
値はn
コマンドラインに提供されます。
[[:graph:]]
と同じで、[[:alnum:][:punct:]]
と同じです[[:alpha:][:digit:][:punct:]]
。スペースとほぼ同じ[[:print:]]
ですが、スペースと一致しません。
[^[:graph:]]
すべてのタブまたはスペースを削除する代わりに、すべてのタブまたはスペースを削除するために使用できます[[:blank:]]
。
sed
上記のコードとほぼ同じです。awk
sed -e 'h; s/[^[:graph:]]//g' \
-e '/.\{5\}/!d; g'
または単純化するため(空白以外の文字のみを計算)
sed -e 'h; s/[[:blank:]]//g' \
-e '/...../!d; g'
まず、現在の行を予約済みスペースに保存しますh
。次に、その行からグラフィック以外の文字(または2番目のバリアントの場合は空白文字)をすべて削除しますs///g
。線に5文字未満が含まれている場合(希望の数に変更するか、2番目のバリエーションでポイント数を変更)、線は削除されます。それ以外の場合は、保存された行が予約済みスペースから取得されg
(暗黙的に)印刷されます。