sed
およびgrep
を使用して100文字より長く150文字より短い行を見つける方法
sed -nr '/^.{101,149}$/p' infile
-n
:印刷なし-n
オプションは、明示的な印刷要求が見つからない限り、何も印刷しないようにします(^.{101,149}$
"100(> = 101)より長く、150文字未満の行(<= 149)」)。印刷をオンに戻す1つの方法として使用される/p
フラグ。
-r
:-r(--regexp-extended)-r
は、拡張正規表現を有効にします。 sedが認識しない場合は-r
を-E
に置き換えます。sedのバージョンで中括弧がサポートされていない場合は中括弧をエスケープする必要があります。その場合、コマンドはsed -n '/^.\{101,149\}$/p' infile
になります。
^
は、行頭の単なるアンカーであり、$
は行末のアンカーです。
単一の.
は、任意の単一文字に一致します
したがって、sed -nr '/^.{101,149}$/p' infile
を使用して、定義済みのルールが含まれているか含まれている行を最初から最後まで探しています。
これは、grep
の機能をsed
と複製する方法です。例:sed -n '/.../p'
:)
grep -E '^.{101,149}$' infile
-E
これはsedの-r
オプションと同じですが、grep
コマンドを使用します。したがって、使用したくない場合は、中括弧をエスケープするだけです。awk 'length($0)>100 && length($0)<150' infile
length
は行の長さを返します。 awkでは、$0
は行全体を指定します。したがって、行の長さが100〜150の場合、印刷されます。bash
を使用してこれを行う別の方法:
while read l; do nc=$(<<< "$l" wc -c); [ $nc -ge 101 ] && [ $nc -le 149 ] && echo "$l"; done < file
スクリプトに展開:
#!/bin/bash
while read l; do
nc=$(<<< "$l" wc -c)
if [ $nc -ge 101 ]; then
if [ $nc -le 149 ]; then
echo "$l"
fi
fi
done < file