2つのsedコマンドを1つにまとめたいのですが、どうすればいいかわかりません。いくつかの方法を試しましたが、成功しませんでした。
その結果、特定のトークン間のすべてのスラッシュをバックスラッシュに置き換えようとします。その結果は次のとおりです。
源泉:
<FilePath>a/b/c/d</FilePath>
<OtherTags>Bob</OtherTags>
<FilePath>1/2/3/4</FilePath>
結果:
<FilePath>a\b\c\d</FilePath>
<OtherTags>Bob</OtherTags>
<FilePath>1\2\3\4</FilePath>
ラベル間のテキストを変更する次のコマンドが見つかりました。
sed -i -e 's/\(<FilePath>\).*\(<\/FilePath>\)/<FilePath>TEXT_TO_REPLACE_BY<\/FilePath>/g' test.txt
しかし、このコマンドはすべてのテキストを置き換えます...だから私が望むのはテキストを保持し、次のコマンドを使用してスラッシュをバックスラッシュに置き換えることです。
sed -e 's/\\/\//g' test.txt
しかし、これら2つを組み合わせるのは難しいです。
ご協力ありがとうございます。
ベストアンサー1
match()の3番目の引数を一致させるには、GNU awkを使用します。
awk 'match($0,/(.*<FilePath>)(.*)(<\/FilePath>.*)/,a){ gsub("/","\\",a[2]); $0=a[1] a[2] a[3] } 1' file
<FilePath>a\b\c\d</FilePath>
<OtherTags>Bob/Smith</OtherTags>
<FilePath>1\2\3\4</FilePath>
上記は次の入力で実行されました。
$ cat file
<FilePath>a/b/c/d</FilePath>
<OtherTags>Bob/Smith</OtherTags>
<FilePath>1/2/3/4</FilePath>