sed를 사용하여 탭 문자처럼 보이는 것을 찾고 바꾸는 방법은 무엇입니까?

sed를 사용하여 탭 문자처럼 보이는 것을 찾고 바꾸는 방법은 무엇입니까?

다음과 같은 줄이 있습니다.

some.com    *.some.com

키보드 화살표를 움직일 때 한 번만 움직이면 끝으로 이동하기 때문에 공백이 탭 공백인 것처럼 보입니다(여러 공백을 사용하려면 키보드 화살표를 여러 번 움직여야 하므로 공백이 여러 개 있는 것처럼 보이지 않습니다).

이 공간은 나에게 문제를 일으킨다. 다음을 수행해야 합니다.

  1. 그것이 무엇인지 찾아보세요.

  2. 단일 공백으로 대체하십시오.

어떻게 해야 하나요? 공백을 여러 개 제거해 보았지만 단일 문자를 제거할 수 없는 것 같습니다.

편집하다:

추가 정보입니다. 이 줄을 사용하는 프로그램은 다음과 같은 불만을 표시합니다.Invalid control character

답변1

탭 문자입니다.

tr -s '[:blank:]' ' ' <file >newfile

tr이는 파일의 탭이나 공백을 단일 공백으로 바꾸는 데 사용됩니다 . 출력의 여러 공백이 단일 공백으로 압축됩니다. 결과는 에 기록됩니다 newfile.

단일 탭 문자를 단일 공백으로 바꾸려면 다음을 사용하십시오.

tr '\t' ' ' <file >newfile

답변2

더 적은 수의 명령을 사용할 때 UNIX에서 특수 문자 표시

캐릭터가 무엇인지 확인하려면:

less -r sourcefile

또는

od -c sourceFile

좀 더 자세히 보려면.

unix-linux-sed-ascii-제어 코드-인쇄 불가능

sed문제가 있는 제어 코드를 찾으 려면 :

sed 's/'`echo "\033"`'/ /g'

어디에 \033실제로 존재하는 것으로 대체됩니다.

답변3

당신은 또한 이것을 사용하여 끝날 수 있습니다

sed -E "s,[[:space:]]+, ,g" /tmp/test

이는 단일 또는 다중 "공백"(공백, 탭)을 단일 "공백"으로 대체합니다.

$ cat /tmp/test 
sdfsdfsdf    sdfsdfsdfsd
sdflksjdf    sdfélsdkfésldkf    ss

결과

$ sed -E "s,[[:space:]]+, ,g" /tmp/test 
sdfsdfsdf sdfsdfsdfsd
sdflksjdf sdfélsdkfésldkf ss

관련 정보