注:この質問は、このQ&Aの補足です:- 行の長さを「grep」して「指定された範囲にない」方法
テキストファイル(単語リスト、改行で区切られた)から、最小長が3文字以上で10以下の行のみを取得する必要があります。
例:
入力:
egyezményét
megkíván
ki
alma
kevesen
meghatározó
出力:
megkíván
alma
kevesen
質問:bash
でこれを行うにはどうすればよいですか?
grep -x '.\{3,10\}'
どこ
-x
パターンを行全体に一致させる.
任意の記号{3,10}
前のシンボルの3倍から10倍まで数値化します(いずれかの場合)egrepを使用する
egrep '^.{3,10}$'
3文字以上10文字以下の行の最初から最後まで一致します。
sed
の使用:
sed '/^.\{3,10\}$/!d'
または:
sed -r '/^.{3,10}$/!d'
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