Sed에서 처리된 파일은 vi와 cat에서 다르게 나타납니다.

Sed에서 처리된 파일은 vi와 cat에서 다르게 나타납니다.

sed내가 파일을 망쳤 는지 모르겠어요 . or viless잘 표시되지만 cat및는 more다른 문자를 삽입합니다. 왜 그들은 다르게 행동합니까?

저는 표준 xterm이 포함된 Redhat Linux 시스템을 사용하고 있습니다.

이전의 원본 탭 파일:

scaffold1000    693:14709284:741:333    129011535   1
scaffold1000    693:14709284:27:726 129011535   1
scaffold1000    693:14709284:44:1157    129011535   1
scaffold1000    693:14709284:771:459    129011535   1
scaffold1000    693:14709284:610:615    129011535   1
scaffold1000    693:14709284:1152:1159  129011535   1

적용하다 sed:

sed -i 's/scaffold/scaffold\_/' [myfile]

또한 백슬래시 없이 시도했지만 동일한 결과를 얻었습니다.

이것을 사용하면 cat다음과 같습니다.

scaffold11000   693:14709284:741:333    129011535   1
scaffold11000   693:14709284:27:726 129011535   1
scaffold11000   693:14709284:44:1157    129011535   1
scaffold11000   693:14709284:771:459    129011535   1
scaffold11000   693:14709284:610:615    129011535   1

이 "1"은 어디에서 왔습니까? :(

내가 보는 것을 편집 vi하거나 사용하십시오 .less

scaffold_1000   693:14709284:741:333    129011535       1^M     1^M     1       
scaffold_1000   693:14709284:27:726     129011535       1^M     1^M     1       
scaffold_1000   693:14709284:44:1157    129011535       1^M     1^M     1       
scaffold_1000   693:14709284:771:459    129011535       1^M     1^M     1       
scaffold_1000   693:14709284:610:615    129011535       1^M     1^M     1       
scaffold_1000   693:14709284:1152:1159  129011535       1^M     1^M     1    

^M캐릭터가 이것과 관련이 있습니까? 마치 내 눈을 믿을 수 없을 것 같은...

답변1

파일의 각 줄에는 문자열이 포함되어 있습니다.

^M     1

두 배. 그건,

<carriage-return><tab>1
^M^I1
\r\t1

(동일한 제어 문자를 세 가지로 다르게 표현한 것입니다.)

터미널로 직접 전송되면 cat터미널은 이를 줄의 시작 부분으로 다시 이동하여 8자를 이동하여 표시하는 것으로 해석합니다 1.

cat원본 파일을 보면 이 추가 파일이 1기존 파일 위에 나타나기 1때문에 눈에 띄지 않습니다.

접두사를 에서 로 변경한 후 scaffold이제 scaffold_추가된 내용이 1표시되므로 _이제 알 수 있습니다.

vi또는 에서 파일을 열면 emacs편집기는 <carriage-return>시퀀스를 동일한 방식으로 해석하지 않고 대신 표시합니다.

나는 당신이 <carriage-return><tab>1파일의 문자열을 원하지 않는다고 가정합니다. 다음 명령을 사용하여 삭제할 수 있습니다 sed.

sed -i 's/\r\t1//g' myfile

"내 눈을 믿을 수 없습니다"라는 의견과 관련하여 제어 시퀀스가 ​​사물이 나타나는 방식을 변경하기 때문에 혼란스러울 수 있습니다. 상황을 더 명확하게 보는 한 가지 방법은 cat-v옵션을 사용하는 것입니다 -T.

-v, --show-nonprinting   use ^ and M- notation, except for LFD and TAB
-T, --show-tabs          display TAB characters as ^I
-t                       equivalent to -vT

예를 들어:

$ cat myfile
scaffold1test
$ cat -t myfile
scaffold_hello^M^I1

답변2

^M캐리지 리턴 문자입니다.

dos2unix <file>이를 사용하여 파일에서 DOS 키를 제거 할 수 있습니다.

답변3

없는 경우 dos2unix다음을 수행할 수 있습니다 sed.

sed -i 's/\r//g' <THE FILE NAME>

모든 캐리지 리턴이 제거됩니다.

관련 정보