2048文字を超える行を削除する方法に関する質問が見つかりました。
尋ねる:しかし、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
結果がストリーミング状態に保たれ、パラメータ長エラーが発生しないことも保証されます。