web-dev-qa-db-ja.com

指定された範囲の行の長さを「grep」する方法

注:この質問は、このQ&Aの補足です:- 行の長さを「grep」して「指定された範囲にない」方法


テキストファイル(単語リスト、改行で区切られた)から、最小長が3文字以上で10以下の行のみを取得する必要があります。

例:

入力:

egyezményét
megkíván
ki
alma
kevesen
meghatározó

出力:

megkíván
alma
kevesen

質問:bashでこれを行うにはどうすればよいですか?

28
user90825
grep -x '.\{3,10\}'

どこ

  • -xパターンを行全体に一致させる
  • .任意の記号
  • {3,10}前のシンボルの3倍から10倍まで数値化します(いずれかの場合)
39
Costas

egrepを使用する

egrep '^.{3,10}$'

3文字以上10文字以下の行の最初から最後まで一致します。

11
repzero

sedの使用:

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

または:

sed -r '/^.{3,10}$/!d'
1
agc

awkの使用:

awk 'length >= 3 && length <= 10' file

lengthステートメントは、デフォルトで$0(現在のレコード/行)の長さを返します。これは、行の長さが指定された範囲内にあるかどうかをテストするためにコードによって使用されます。このようなテストに対応するアクションブロックがない場合、デフォルトのアクションはレコードを印刷することです。

与えられたデータでのテスト:

$ awk 'length >= 3 && length <= 10' file
megkíván
alma
kevesen

同様にPerlでも:

$ Perl -lne '$l=length($_); print if ($l >= 3 && $l <= 10)' file
megkíván
alma
kevesen
0
Kusalananda