2015-01-20 2 views
1

sed을 사용하여 파일에서 키워드를 추출 할 때 문제가 있습니다. sed를 사용하여 파일에서 단어를 추출

======================= keyword begin ======================= 
blablabla 
======================== keyword end ======================== 

그럼 내가 할 : 파일에
콘텐츠처럼 '] 키워드가'표시 왜 모르겠어

$ sed -n 's/=* \(.*\) begin =*/\1/p' test 
keyword ## It is ok 
$ a=`sed -n 's/=* \(.*\) begin =*/\1/p' test` 
$ echo "[$a]" 
]keyword ## Why the output is like this? I think it should be [keyword] 

.

+3

재생할 수 없습니다. 어떤 플랫폼을 사용하고 계십니까? Bash의 어떤 버전입니까? 그것은 나를 위해'[keyword]'를 출력합니다. –

+1

모두 괜찮아 보입니다. Bash 버전을 @JohnZwinck가 제안한대로 확인하십시오 – Skynet

답변

4

Windows 시스템에서 작성된 파일이므로 캐리지 리턴이 있기 때문에 이런 현상이 발생합니다. dos2unix 또는 tr -d '\r'으로 파일에서 제거하십시오.

\r은 터미널이 처음부터 동일한 줄을 덮어 쓰기 시작하기 때문에 알 수 있습니다. [keyword으로 작성한 후 행 시작 부분에서 ]으로 덮어 쓰면 ]keyword이됩니다.

자세한 내용은 bash tag wiki을 참조하십시오.

+1

맞습니다. 고맙습니다. – ruanhao

+1

@ruanhao :이 답이 문제를 해결 한 경우 왼쪽의 확인 표시를 클릭하여 문제를 "수락"해야합니다. –

0

사용, 그것은 그냥 변경 "[$가]"이 [키워드]

1

를 인쇄합니다

당신이 에코 사용하면 단지 키워드가 인쇄됩니다 대신 에코 "[$ A]"의 $ A 에코 당신의 sed 명령에 :

a=$(sed -n 's/=* \(.*\) begin =*.*$/\1/p' file) 
echo "[$a]" 
[keyword] 

sedbegin 후 모든 = 일치하고 (\r 포함) =의 종료 후 남아있는 모든 문자.

관련 문제