grepを使用して印刷できない「ブロック型」文字フィルタリング

grepを使用して印刷できない「ブロック型」文字フィルタリング

(トレーニング目的で)フィルタリングするLinuxシステムにデータベース制御ファイルがあります。ただし、「ブロック型」文字を削除する正しい方法が見つかりません。

▒▒▒▒
▒▒▒▒
▒▒▒▒
▒▒▒▒▒
▒▒▒{
▒▒▒▒▒▒9
▒▒▒▒
▒▒▒▒▒

いくつかの方法を試しましたが、ブロック文字は削除されません。

258     strings o1_mf_d3rrgv0l_.ctl|grep -vE '▒'
259     strings o1_mf_d3rrgv0l_.ctl|grep -vE '@|?|+|(|)|<|>'
260     strings o1_mf_d3rrgv0l_.ctl|grep -vE '@|\?|\+|(|)|<|>'
261     strings o1_mf_d3rrgv0l_.ctl|grep -vE '@|\?|\+|\(|\)|\<|\>'
262     strings o1_mf_d3rrgv0l_.ctl|grep -vE '@|\?|\+|\(|\)|\<|\>|!'
263     strings o1_mf_d3rrgv0l_.ctl|grep -vE '@|\?|\+|\(|\)|\<|\>|!|\^|\%|\`'
264     strings o1_mf_d3rrgv0l_.ctl|grep -vE '@|\?|\+|\(|\)|\<|\>|!|\^|\%|\`|\$'
265     strings o1_mf_d3rrgv0l_.ctl|grep -v '[^[:print:]]'
266     strings o1_mf_d3rrgv0l_.ctl|grep -v '[[:print:]]'
267     strings o1_mf_d3rrgv0l_.ctl|grep  '[[:print:]]'
268     strings o1_mf_d3rrgv0l_.ctl|grep -v  '[[:cntrl:]]'
269     strings o1_mf_d3rrgv0l_.ctl|grep -v '\x{09}'
270     strings o1_mf_d3rrgv0l_.ctl|grep -vP '[^\x00-\x7f]'
271     strings o1_mf_d3rrgv0l_.ctl|tr -dc '\007-\011\012-\015\040-\376'
272     strings -1 o1_mf_d3rrgv0l_.ctl|tr -dc '\007-\011\012-\015\040-\376'
273     strings o1_mf_d3rrgv0l_.ctl|tr -dc '[:print:]\n\r'
274     strings o1_mf_d3rrgv0l_.ctl|grep -vE '@|\?|\+|\(|\)|\<|\>|!|\^|\%|\`|\$'
275     strings o1_mf_d3rrgv0l_.ctl|grep -vE '@|\?|\+|\(|\)|\<|\>|!|\^|\%|\`|\;|\:|\=|\$'
276     strings o1_mf_d3rrgv0l_.ctl|grep -vE '@|\?|\+|\(|\)|\<|\>|!|\^|\%|\`|\;|\:|\=|\$|\"'
277     strings o1_mf_d3rrgv0l_.ctl|grep -vE '@|\?|\+|\(|\)|\<|\>|!|\^|\%|\`|\;|\:|\=|\$|\"|\&|\#'

答え1

「正常に知られている」文字以外の文字を削除する方が簡単かもしれません。たとえば、出力を標準のASCII文字に制限するには、次のようにします。

tr -dc '[^ -~\012\015]'

これにより、SPACEと〜(文字126)の間の文字とCR / LF文字のみが保存されます。他のすべてのコンテンツは削除されます。

あるいは、スペースなどの他の文字で置き換えることもできます。

tr -c '[^ -~\012\015]' ' '

これにより、インデントのレベルが維持されます。

最後に、これを見ることもできます。ロケールたとえば、オペレーティングシステムではUTF8があると考えていますが、端末ではそうでない場合はこの内容が表示されることがあります。

したがって、LANG=Cコマンドを実行する前に設定すると、出力が変わる可能性があります。

LANG=C strings o1_mf_d3rrgv0l_.ctl

これはstrings、コマンドが印刷可能文字と見なす内容を変更します。

答え2

興味深い旅の後、これがGNUに関するあなたの質問に答えることを願っていますgrep

サンプルfile.txt:

▒▒▒▒
▒▒▒▒
▒▒▒▒
foo
bar
@▒^@^@▒▒^@^@^@^@^@^@^@^@^@^@<▒^@^@^@^@@^@^@^@^D~z{|}^@^@^▒^@^@^@^@^@^@^@^@^@^@

$ grep -v $(printf %b \\U2592) file.txt
foo
bar

関連情報