メモ:この質問はこのQ&Aに関する補足資料です。指定された範囲内で*なし*行の長さを見つけるために「grep」する方法は?
長さの範囲が少なくとも3文字以上10文字以下のテキストファイル(改行で区切られた単語のリスト)から行を取得する必要があります。
例:
入力する:
egyezményét
megkíván
ki
alma
kevesen
meghatározó
出力:
megkíván
alma
kevesen
質問:どうすればいいですかbash
?
答え1
grep -x '.\{3,10\}'
どこ
-x
(--line-regexp
GNUでも動作grep
)全行にパターンマッチング.
任意の単一文字\{3,10\}
前の記号(ある場合)の3〜10倍を量子化します。
答え2
使用grep -E
:
grep -E '^.{3,10}$'
これは3〜10文字の行に一致します。
答え3
以下を使用しますawk
(GNUなどのロケール認識実装であると仮定すると、awk
3文字より短いマルチバイト文字(「Ők」など)の行は一致しません)。
LC_ALL=hu_HU.UTF-8 awk 'length >= 3 && length <= 10' file
デフォルトでは、このlength
ステートメントは(現在のレコード/行)の長さを返します。$0
これは、コード内の行の長さが指定された範囲内にあるかどうかをテストするために使用されます。そのテストに対応する作業ブロックがない場合、基本的な作業は履歴を印刷することです。
与えられたデータのテスト:
$ LC_ALL=hu_HU.UTF-8 awk 'length >= 3 && length <= 10' file
megkíván
alma
kevesen
Perlに似ています:
$ LC_ALL=hu_HU.UTF-8 perl -C -lne '$l=length($_); print if ($l >= 3 && $l <= 10)' file
megkíván
alma
kevesen
答え4
私はこれが誰かに役立つと思います。展開して1行の特定の文字列と一致させたい場合次より長くない255文字を仮定しましょう。これが解決策になります。
使用法:文字列を探しているが作成していない、または不要な縮小JSファイルなどの長い行を除外する場合
grep -x '.\{1,255\}theStringIWant.\{1,255\}'
特定の数(1と255、255と1、または255と255のいずれか)を超えないように両端の長さを実際に制御できないため、少しハッキングされますが、ほとんどの場合、長い行が縮小するのを防ぎます。
BASH初心者のためのヒント:\
バックスラッシュは中括弧のエスケープ文字です{}
。
はい/証明:
echo "aaaalocalStoragebbbbccccdd" | grep -x '.\{3,10\}localStorage.\{3,10\}' #works
echo "aaaalocalStoragebbbbccccdddd" | grep -x '.\{3,10\}localStorage.\{3,10\}' #doesn't work, dddd puts end string to 12 chars