2016-10-17 4 views
0

'control+M' 문자와 '\r' 문자의 차이점은 무엇입니까?대조 + M 문자와 ' r'문자의 차이점은 무엇입니까? 어떻게 작성합니까?

둘 다 동일하지 않습니다. '\ r'과 같이 gawk에 control + M 문자를 쓰려면 어떻게해야할까요?

내 목표는 gawk에게 'comtrol + M'문자를 RS (레코드 구분 기호)로 사용하는 것입니다. 나는 위의 코드를 사용하면

$ grep '\r' raw_file | wc 
    1468 44570 2641642 

$ grep '^M' raw_file | wc 
    1463 44522 2638958 

및 걸릴 : 나는 'comtrol+M'

배경을 먹고 싶어 여기에 대신 '\r'

gawk -v RS='\r' 'code goes here' file 

gawk -v RS='\r' -v ORS='\n' '{gsub(/\n/,"",$0)} {print $0}' rawfile > newfile_slashr_removed 

는 '\ r에'를 위해 우리가 쓸 수 있습니다 결과를 파일에 넣으십시오.

$ grep '^M' WDY_worker_incr_newfile | wc 
     0  0  0 
$ grep '\r' WDY_worker_incr_newfile | wc 
    1464 44570 2640175 

여기 무슨 일 이니? V다음Ctrl 키 - - M 키 조합 당신은 ^M 작성하지

+0

'printf "^ M"| od'는'printf "와 똑같이 출력합니다. \ r"| od'. grep보다는'grep -c'를 사용하면된다. wc' –

+0

당신은 왜 control-M과'\ r'이 다른 가라고 생각합니까? – Henry

+0

Henry, grep 명령의 결과를 같은 파일에 표시했습니다. 결과는 다릅니다. – user6613676

답변

3

, 당신은 Ctrl 키를를 누릅니다. 초기 Ctrl-V는 쉘 명령 행 편집을 다음 키를 "이스케이프"하게합니다 - 일반적으로 Ctrl-M은 쉘에서 Return과 동일한 조치로 맵핑되지만,이 명령으로 리터럴 캐리지 리턴을 입력 할 수 있습니다 선. & AT, 현대 쉘 (mksh에 M + '

을 - Ctrl 키 V + -이와

, 당신은 다음을 RS=' + Ctrl 키를 입력하여 RS='^M'grep '^M'을 쓸 수 있습니다 T ksh93, GNU bash 등), 대신 RS=$'\r'grep $'\r'을 쓰면 달러 어포 스트로피 따옴표가 C 스타일 이스케이프 시퀀스를 보간합니다.

대부분의 도구 을 입력하면 '\r'을 쓸 수 있습니다. printf 및 tr은 예외이며 사용 된 운영 체제 및 도구 (예 : GNU sed는 BSD sed보다 더 많은 곳에서 허용됩니다)에 따라 다른 것이 있거나 없을 수 있습니다. 당신이 다시하려면 도구가 오작동 할 수 있도록

당신은 단지주의의 또 다른 지점으로, unix으로이 태그하지만, Cygwin32 같은 DOS 기반 환경에 ^M^J은 행 단락,하지 적절한 유닉스와 같은 단지 ^J입니다 - 캐리지 리턴을 사용하십시오.