一連の文字をgrepします(10進符号化)。

一連の文字をgrepします(10進符号化)。

許可される文字のリストがあります。

!"#$%&'()*+,-./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_

関連情報