따옴표가 포함된 파일을 처리하는 방법은 무엇입니까?

따옴표가 포함된 파일을 처리하는 방법은 무엇입니까?

나는 BASH의 이스케이프 문자에 대해 꽤 알고 있습니다. \다음 문자를 이스케이프하고 및를 " "제외한 모든 문자를 이스케이프 하고 마지막으로 를 제외한 모든 문자를 이스케이프한다는 것을 알고 있습니다 . 예를 들어 작은따옴표 '가 포함된 텍스트가 있는 경우 그 주위에 " "를 넣어 단일 텍스트 문자열처럼 동작하도록 할 수 있습니다. 내가 가진 문제는 내 파일에 큰따옴표와 작은따옴표 문자가 모두 포함되어 있을 때입니다. 그런 다음 두 유형의 따옴표를 사용하여 이스케이프할 수 없습니다. 그렇다면 bash에게 이를 단일 문자열로 처리하도록 요청하려면 어떻게 해야 할까요?$"' ''

컨텍스트: 내 iPhone의 /var/mobile/Library/Safari/History.plist 파일. 여기에는 다음과 같은 내용이 포함되어 있습니다.

  <key>
    <string>http://example.com/folder/index.html</string>
    <string>Title of Webpage which may include ' and "</string>
  </key>

cat파일을 전달하고 grep텍스트가 포함된 첫 번째 줄을 가져와서 string그 파일에서 URL을 추출하고 싶습니다 . 그러나 grep모든 인용문에 질식합니다.

편집 1: 다음은 nano가 파일을 읽지 못하는 일부 스크린샷입니다. Cat은 비슷한 출력을 제공합니다. 그래픽 파일 편집기인 iFile은 이를 텍스트로 읽습니다. http://cloudrac3r.ddns.net/strange.html 나는 이것이 바이너리 파일이 하는 일이라고 들었습니다. 나는 몇 가지 실험을 할 것입니다.

답변1

문자 그대로 명령에 문자열을 입력하면 원하는 대로 문자를 이스케이프할 수 있습니다.

grep 'Title of Webpage which may include '\'' and "' /var/mobile/Library/Safari/History.plist
grep "Title of Webpage which may include ' and \"" /var/mobile/Library/Safari/History.plist

또한 cat필요하지 않다는 점에 유의하십시오.

더욱이 XML 인식 도구를 사용하여 XML을 처리하는 것이 훨씬 더 좋습니다.

xmllint -xpath \
    '//key[string=concat("Title of Webpage which may include '\'' and ", '\''"'\'')]' \
    /var/mobile/Library/Safari/History.plist

답변2

(수정 내용을 답변으로 변환)

plutilplist는 '바이너리 파일'이므로 적절한 텍스트로 변환하는 명령을 사용했습니다 . 일단 완료되면 grep파일 관리에 문제가 없었습니다.

관련 정보