質問:
私はsedが初めてなので、シェルで次のコードを実行すると:
sed -e "/^\s<key>CHANNEL_NAME<\/key>$/{N;s/\(^\s<string>\).+\(<\/string>$\)/\1test\2}" Info.plist > test.plist
Sed でエラーが表示されます: "sed: 1: "/^\sCHANNEL_NAME<\ ...": エスケープされていない改行が置換パターン内にあります"
私の質問:「代替パターン内のエスケープされていない改行」とは正確にはどういう意味ですか?
Info.plist ファイルは次のようになります。
...
<key>CHANNEL_NAME</key>
<string>App Store</string>
...
みんなが質問に答えてくれてありがとう、ありがとう!
答え:
ありがとう@potong @dogbane @Beta!: )
それはココアのplistなので、これが私の最終的な解決策です:
sed '/<key>CHANNEL_NAME<\/key>/{N;s/\(<string>\).*\(<\/string>\)/\1test\2/;}' Info.plist > test.plist
チップ:
- 問題を解決するためのプロセス中に 2 つのエラーが発生しました。それらをここに入れます:
- sed: 1: "/^\sCHANNEL_NAME<\ ...": 置換パターン内のエスケープされていない改行
- sed: 1: "/CHANNEL_NAME</ke ...": 代替コマンドのフラグが正しくありません: '}'
- 私は最初のコードで非常に多くの間違いを犯します。
- 「+」をエスケープしていません
- 2/} で終わる必要があります」
- 実際には 2/;} で終わる必要があります" (「;」が抜けているため、ヒント 1 で 2 番目のエラーが発生しました)
- ユーザー「n」または「N」はどちらも機能します。
- おそらくMacでは、「.+」(エスケープしても)が機能しないため、@potongが言ったように「..*」に変更する必要があります
コードを承認するための良いアドバイスは大歓迎です。次のすべての人にもう一度感謝します!