XYより短い行を削除する方法は?

XYより短い行を削除する方法は?

2048文字を超える行を削除する方法に関する質問が見つかりました。

XYより長い線を削除する方法は?

尋ねる:しかし、4文字より短い行を削除する方法は?したがって、長さ1、2、または3の行がファイルから削除されます。

更新:良い答えをたくさんありがとう。しかし、「OK」と表示できる答えは1つだけです。

答え1

次のコマンドを使用すると、sed長さが3文字以下の行を削除できます。

sed -r '/^.{,3}$/d' filename

ファイルの変更を保存するには、この-iオプションを入力してください。

あなたのバージョンがsed拡張RE構文をサポートしていない場合は、BREに同じコンテンツを作成できます。

sed '/^.\{,3\}$/d' filename

これはすべてのsedバリアントに適用されます。


以下も使用できますawk

awk 'length($0)>3' filename

使用perl:

perl -lne 'length()>3 && print' filename

答え2

追加の変更:

grep .... file

または

sed '/..../!d' file

または

sed -n 's/./&/4p' file

または

awk 'gsub(/./,"&")>3' file

または

awk 'length>3' file

またはGNU awk:

awk 'NF>3' FS= file

答え3

これはVimのExモードとコマンドを使用するVimソリューションですglobal

sedこれは、いくつかの特殊文字( '{'、 '}')をエスケープする必要があることを除いて、使用するのと非常によく似ています。

:g/^.\{,3\}$/d

Vimの素晴らしい正規表現パターン(\ v)を使用すると、これらのエスケープを回避できます。

:g/\v^.{,3}$/d

参照:魔法のヘルプ

Use of "\v" means that in the pattern after it all ASCII characters except
'0'-'9', 'a'-'z', 'A'-'Z' and '_' have a special meaning.  "very magic"

時にはその逆を行うのも便利ですvglobal

:v/\v^.{,3}$/d

行を除くすべての内容が削除されます(最大3文字)。

答え4

これらの行を直接削除するには:

sed -ri '/.{4}/!d' /path/to/file

またはブレイ:

sed -i '/.\{4\}/!d' /path/to/file

1行に4文字以上が含まれていない場合は削除されます。

f=/path/to/file
cat <<GREP >"$f"
    $(grep -E ".{4}" "$f")
GREP

コマンド置換サブシェルで上記の操作を実行すると、書き込みをgrep開始する前にcatの読み取り記述子を取得できますが、<<HEREDOC結果がストリーミング状態に保たれ、パラメータ長エラーが発生しないことも保証されます。

関連情報