特定の範囲の行の長さを「grep」する方法は?


28

注:この質問は、このQ&Aを補完するものです。特定の範囲ではなく、行の長さを「grep」するにはどうすればよいですか?


テキストファイル(改行で区切られたワードリスト)から行を取得する必要があるのは、長さが3文字以上で10文字以下の範囲です。

例:

入力:

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

出力:

megkíván
alma
kevesen

質問:どうすればこれを行うことができbashますか?


9
grep -x '.\{3,10\}'
コスタ

@Costasは素晴らしいです。同じことがsedにも当てはまります。完全な回答を投稿してください。
オリオン

回答:


37
grep -x '.\{3,10\}'

どこで

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

10

egrepを使用

egrep '^.{3,10}$'

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


1

を使用してsed

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

または:

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

0

を使用して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
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.