나는 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
(수정 내용을 답변으로 변환)
plutil
plist는 '바이너리 파일'이므로 적절한 텍스트로 변환하는 명령을 사용했습니다 . 일단 완료되면 grep
파일 관리에 문제가 없었습니다.