Unix 파일의 줄 끝에서 특수 문자 제거

Unix 파일의 줄 끝에서 특수 문자 제거

구분 기호 가 있고 ~@~~@~때로는 . 따라서 파일의 데이터는 다음과 같습니다.~@~~@~~@~~@~~@~

ABC~@~~@~TUV~@~~@~XYZ~@~PQR~@~13470~@~Management~@~Non-Employee IJK~@~T~@~12345~@~12345~@[email protected]~@~B~@~~@~~@~~@~6789~@~09/25/2017 11:31:22.000000~@~09/25/2017 3:22:03.000000~@~~@~~@~~@~~@~~@~~@~~@~~@~~@~~@~~@~~@~~@~~@~~@~~@~~@~~@~~@~~@~~@~~@~~@~~@~~@~~@~~@~~@~~@~~@~~@~~@~~@~~@~~@~~@~~@~~@~~@~~@~~@~~@~~@~~@~~@~~@~~@~~@~~@~~@~~@~~@~~@~~@~~@~~@~~@~~@~~@~~@~~@~~@~~@~~@~~@~~@~~@~~@~~@~~@~~@~~@~~@~~@~~@~~@~~@~~@~~@~~@~~@~~@~~@~~@~~@~~@~~@~~@~~@~~@~~@~~@~~@~~@~~@~~@~~@~~@~~@~~@~~@~~@~~@~~@~~@~~@~~@~~@~~@~~@~~@~~@~~@~~@~~@~~@~~@~~@~~@~~@~~@~~@~~@~~@~~@~~@~~@~~@~~@~~@~~@~~@~~@~~@~~@~~@~~@~~@~~@~~@~~@~~@~~@~~@~~@~~@~~@~~@~~@~~@~~@~~@~~@~~@~~@~~@~~@~~@~~@~~@~~@~~@~~@~~@~~@~~@~~@~~@~~@~~@~~@~~@~~@~~@~\n

"마지막 날짜" 필드에서 "줄 끝"까지의 문자를 제거해야 합니다. 나는 이것을 시도했지만 sed 's/~@~~@~~@~\n*//g' File name>Replacedfilename.txt끝에 특수 문자 세트가 유지됩니다.

답변1

... | sed 's/\(~@~\)*$//'

줄 끝 을 원하는 수만큼 제거합니다 ~@~(물론 \n예제의 줄 끝이 리터럴 백슬래시 및 소문자 N이 아닌 줄 끝 개행을 나타낸다고 가정).

또는 확장 정규 표현식을 지원하는 s에서는 다음과 같습니다 sed.-E

... | sed -E 's/(~@~)+$//' 

또는 awk -F'~@~'필요한 필드를 동시에 사용하고 처리할 수도 있습니다.

답변2

위의 데이터가 파일에 있다고 가정합니다 f1.txt. sed 명령을 사용하여 ~@~~@~sum 항목을 모두 제거할 수 있습니다 ~@~. 공백으로 대체했습니다.

sed -e 's/~@~~@~/#/g;s/~@~/#/g;s/# */ /g' f1.txt > output.txt

결과

ABC TUV XYZ PQR 13470 Management Non-Employee IJK T 12345 12345 [email protected] B  6789 09/25/2017 11:31:22.000000 09/25/2017 3:22:03.000000

답변3

cat file |sed 's/~@~~@~~@~//g' |sed 's/~@~$//'

첫 번째 sed는 문자열을 삭제하고 ~@~~@~, 두 번째 sed는 마지막 문자열을 삭제합니다.~@~

관련 정보