유닉스 파일에서 Ctrl F를 제거하는 방법

유닉스 파일에서 Ctrl F를 제거하는 방법

Unix 파일을 편집할 때 vi 편집기에서 다음 데이터를 얻습니다.

MGW:^FVMG107
MGW:^FVMG113
MGW:^FVMG108
MGW:^FVMG103

위 데이터는 ^F명령에서 볼 수 없습니다. 저도 cat그렇게 해봤는데 여전히 그대로네요. 어떻게 삭제해?dos2unixsed^F

답변1

^Fvim은 거기에 인쇄할 수 없는 문자 0x06이 있다고 말합니까(F는 알파벳의 여섯 번째 문자이며 해당 범위는 '^@', '^A', '^B'... '^Y', '^ ') ^[', '^\', '^]', '^^', '^_')

vim, nano, joe에서 그래픽으로 제거하는 데 문제가 없습니다. 하지만 명령줄 방법을 선호한다면 문자 0x06이라는 것을 알고 sed -i 's/\x06//g' filename이를 사용하여 제거할 수 있습니다.

추신: cat -v^F를 제거하는 Polym 솔루션은 파일에 인쇄할 수 없는 다른 문자(깨질 수 있음)가 없는 경우에만 작동합니다.

답변2

Ángel이 말했듯 ^F이 in vi또는 의 출력은 cat -v06자를 나타냅니다. 이러한 문자를 제거하는 또 다른 방법은 다음과 같습니다.

tr -d "\06" < oldfile > newfile

답변3

편집 : 같이천사위에서 언급한 것처럼 이 솔루션을 사용하면 원치 않는 변경이 발생할 수 있으므로 사용해서는 안 됩니다.

그의 솔루션(hex( ^F)== \x06):

sed -i 's/\x06//g' filename

내 (잘못된) 해결책:

cat -v oldfile | sed 's/\^F//g' > newfile

그것은 이루어져야합니다.

답변4

vim에서 파일 작업을 하고 있으므로 vi/vim에서도 이 문제를 수정할 수 있습니다. ctrl-v를 누른 다음 ctrl-를 눌러 이러한 문자를 입력할 수 있습니다. 이렇게 하려면 crtl-v를 누른 다음 ctrl-f를 누르십시오.

따라서 간단한 찾기/바꾸기를 사용할 수 있습니다.

:%s/^F//

이는 모든 행(%)에 적용되며 (s)의 첫 번째 인스턴스인 ^F를 아무것도 대체하지 않고 대체하여 효과적으로 삭제합니다.

cat 대신 파일에 숨겨진 문자를 보려면 od -c를 사용해 보십시오.

od -c <file name>

예를 들어 파일에 ^F와 두 개의 줄 끝을 입력합니다.

alex@Smiley:/tmp|⇒  cat test


alex@Smiley:/tmp|⇒  od -c test
0000000  006  \n  \n
0000003

탭, 줄 끝 등을 포함하여 이스케이프된 모든 문자를 인쇄합니다.

sed를 사용하려면 명령줄에서 동일한 ctrl-V, crtl-trick를 사용할 수도 있습니다. 이렇게 하면 번역을 기억할 필요가 없습니다.

관련 정보