(교육 목적으로) 필터링하려는 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