>

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 를 포함하는 첫 번째 줄을 가져옵니다.  그 URL을 추출하십시오. 그러나 string  모든 따옴표를 질식시킵니다.

편집 1 : 다음은 파일을 읽지 못하는 nano의 스크린 샷입니다. 고양이는 비슷한 결과를 제공합니다. 그래픽 파일 편집기 iFile은이를 텍스트로 읽습니다. http://cloudrac3r.ddns.net/strange.html 바이너리 파일이 무엇인지 들었습니다. 실험 해 볼게요.

grep

  • 답변 # 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

    (답변으로 변환 된 편집)

    나는 plutil 를 사용했다  '이진 파일'이므로 plist를 적절한 텍스트로 변환하는 명령입니다. 그것이 완료되면, grep  파일 관리에 문제가 없었습니다.

  • 이전 한 하위 도메인에서 다른 하위 도메인으로 Linux DNS 서버를 가리키는
  • 다음 rename - 파일 이름을 수정하는 배쉬 스크립트