許可される文字のリストがあります。
!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHI
この文字は次のように翻訳できます。ASCII 10進数範囲33-73
私が望む実装は入力ファイルの行を解析し、この範囲外の文字を検出してその行を返します。
grep -E '[^33-73]{1,}'
where-E
は正規表現の解釈、^
リストにない文字の一致、{1,}
1 つ以上の一致の一致に使用さ[33-73]
れ、目的の文字範囲を 10 進形式で表現する方法です。これをどのように表現するのかわかりません。である程度説明できるgrep
。
(正規表現自体で文字リストを定義できますが、grep -E
文字をエスケープすると、式を読み取るのが難しくなります。)
でこれを達成する方法はありますかgrep
? (参考に、作動させようとしています(BSD grep) 2.5.1-FreeBSD
)
入力例:
$ cat f1.txt
(ABC123abc_
ABC!123)-
予想出力:
(ABC123abc_
答え1
これはASCIIの連続文字なので、単に次のことができます。
$ grep '[^!-I]' file
(ABC123abc_
または、他のロケールを使用している場合はより安全です。
$ LC_ALL=C grep '[^!-I]' file
(ABC123abc_