私は 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
ファイルの管理に問題はありませんでした。