sed
내가 파일을 망쳤 는지 모르겠어요 . or vi
는 less
잘 표시되지만 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>
모든 캐리지 리턴이 제거됩니다.