2017-04-11 7 views
-1

나는 캐리지 리턴을 가진 파일을 갖고 있기 때문에 bash 스크립트로 인해 작동하지 않습니다. 내가 그들을 다루는 방법은 dos2unix를 사용하는 것이다. 다음은 스크립트입니다.원본 파일을 변경하지 않고 bash에서 지난 캐리지 리턴 가져 오기

while IFS= read -r line; do 
    [[ $line =~ REGEX ]] && printf "SUCCESS" 
done < <(dos2unix < file) 

그런 식으로 원본 파일을 수정하지 않고 모든 것이 정상입니다. 내 질문은 : 같은 일을하는 또 다른 방법이 있습니까 - 캐리지 반환을 통해 아니고 동시에 원본 파일을 수정 반환합니다.

+0

이 경우 REGEX는 무엇이되어야합니까? 정확히 일치하려는 항목은 무엇입니까? 입력 및 원하는 결과의 견본을 보여주십시오. –

답변

0

하나 하찮게 parameter expansion와 후행 캐리지 리턴 (경우에만 밝혔다 문자가있는 경우)를 제거 할 수 있습니다

while IFS= read -r line && line=${line%$'\r'}; do 
    [[ $line =~ REGEX ]] && printf "SUCCESS" 
done <file 

${var%val}

이 끝에서 제거 된 문자열 val$var의 내용으로 확장을; $'\r'은 ksh93, bash 및 확장을 구현하는 다른 쉘에서 캐리지 리턴 리터럴 인 경우 ANSI-C-like syntax입니다.

+0

Bash에서'$ '\ r''는'shopt -s extquote'를 요구합니다 (기본적으로 활성화되어 있습니다). – ephemient

+0

영원히 당신에게 생명의 은혜를 전할 것입니다! –

+0

한 가지 더 도와 주실 수 있습니까? 나는 sed "s/\ '/ \'\ g/g"를 "파일"에두고 싶다. 나는 그것을 끝내기 위해 노력했다. ("done"과 같은 줄) 그러나 작동하지 않았다. 어떻게해야합니까? –