일부 특수 문자가 포함된 텍스트 파일이 있습니다.
L$+M)jX];&?+jip=ZjJ#}^yV5;fBQ=$L+tG=#x4kDh('t%BWBG/P|U9M`,pcII*6G<r
비슷한 양의 공백 문자가 제거된 일부 문자를 제거하고 싶었습니다. 이를 제거하고 fBQ=$L+tG=#x4kDh('t%BWBG/P|U9M
비슷한 수의 문자로 바꾸고 싶습니다.
캐릭터 카운터에 따르면:
L$+M)jX];&?+jip=ZjJ#}^yV5;fBQ=$L+tG=#x4kDh('t%BWBG/P|U9M`,pcII*6G<r
fBQ=$L+tG=#x4kDh('t%BWBG/P|U9M
68자입니다. 동일한 30자의 공백으로 바꾸고 싶습니다 .
답변1
이를 위해 사용할 수 있습니다 . 패턴에 sed
a가 있기 때문에 약간 까다롭습니다 . 이는 sed에 사용해야 함을 의미하며 이를 보지 못하도록 이스케이프해야 합니다 . "줄 끝"으로 그리고 또한 큰따옴표를 사용하므로 쉘이 이를 변수로 인식하지 않습니다. 마지막으로 a도 있으므로 대체 연산자에 다른 문자를 사용해야 합니다. 이 모든 것을 염두에 두고 다음과 같이 원하는 작업을 수행해야 합니다.'
"
$
sed
/
$ sed "s:fBQ=\$L+tG=#x4kDh('t%BWBG/P|U9M: :" file
L$+M)jX];&?+jip=ZjJ#}^yV5; `,pcII*6G<r
변수에 문자열을 전달하고 이를 바꿀 수 있는 보다 일반적인 솔루션의 경우 다음과 같이 시도해 볼 수 있습니다.
$ export var="fBQ=\$L+tG=#x4kDh('t%BWBG/P|U9M"
$ perl -pe '$f=quotemeta($ENV{var}); s/$f/" " x length($f)/e' file
L$+M)jX];&?+jip=ZjJ#}^yV5; `,pcII*6G<r
답변2
이것이 당신이 하려는 일입니까? 문자열을 공백으로 바꾸시겠습니까?
$ cat str
fBQ=$L+tG=#x4kDh('t%BWBG/P|U9M
$ cat file
L$+M)jX];&?+jip=ZjJ#}^yV5;fBQ=$L+tG=#x4kDh('t%BWBG/P|U9M`,pcII*6G<r
$ awk 'NR==FNR{str=$0; lgth=length(str); next} s=index($0,str){$0=substr($0,1,s-1) sprintf("%*s",lgth,"") substr($0,s+lgth)} 1' str file
L$+M)jX];&?+jip=ZjJ#}^yV5; `,pcII*6G<r
위의 내용은 개행을 제외한 문자열의 모든 문자에 대해 모든 UNIX 상자의 모든 쉘에서 awk를 사용하여 작동합니다.