특수 문자를 제거하고 사이에 같은 수의 공백을 넣고 싶습니다.

특수 문자를 제거하고 사이에 같은 수의 공백을 넣고 싶습니다.

일부 특수 문자가 포함된 텍스트 파일이 있습니다.

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|U9M68자입니다. 동일한 30자의 공백으로 바꾸고 싶습니다 .

답변1

이를 위해 사용할 수 있습니다 . 패턴에 seda가 있기 때문에 약간 까다롭습니다 . 이는 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를 사용하여 작동합니다.

관련 정보