성능 향상을 위한 sed 명령 또는 동일한 성능을 위한 tr 명령

성능 향상을 위한 sed 명령 또는 동일한 성능을 위한 tr 명령

파일에서 인쇄할 수 없는 문자와 작은따옴표를 바꾸는 명령이 있는데, 여러 파일에 대해 이러한 문자를 바꾸고 파일 크기가 약 30GB이기 때문에 실행하는 데 시간이 더 걸립니다.

LANG=iso-8859-1 sed -i 's/[^[:print:]]//g;s/'\''//g;s/'//g' $path/EID*_$1.xml

매개변수를 전달합니다 $path. $1프로세스를 더 빠르게 실행하려면 어떻게 해야 합니까? 사용할 수 있는 다른 명령이 있나요? tr명령이 보다 빠르다고 들었는데 , 내 경우에는 그 명령을 sed어떻게 사용할 수 있습니까 ? tr( tr모든 파일에 대한 한 줄 명령).

나는 다음 명령을 시도했습니다.

LANG=iso-8859-1 sed 's/[^[:print:]]//g;s/'\''//g;s/&apos;//g' < $path/EID123_$1.xml > $path/EID123_$1_new.xml
mv -f $path/EID123_$1_new.xml EID123_$1.xml
LANG=iso-8859-1 sed 's/[^[:print:]]//g;s/'\''//g;s/&apos;//g' <     $path/EID456_$1.xml > $path/EID456_$1_new.xml;
mv -f $path/EID456_$1_new.xml EID456_$1.xml 

i 옵션이 없는 각 단일 파일에 대해 예상한 결과가 제공되지 않으며 파일에 여전히 인쇄할 수 없는 문자가 표시됩니다.

답변1

입력 바이너리 파일부자, 인쇄할 수 없는 문자(또는 어떤 종류의 공백)의 경우 해당 문자를 공백으로 바꾸고 출력을 파이프로 보냅니다.작은따옴표를 공백으로 바꾸고 다음으로 출력합니다.술집.

tr --complement '[:print:]'  ' ' < foo | tr "'"  ' ' > bar

관련 정보