0

%2$uをに置き換えようとしていました

 <ph name='NUMBER' ex='%2$u'/>

次のコマンドを使用して、複数のファイルにまたがって。

find . -name "*.txt" -print | xargs sed -i 's/%2$u/<ph name='NUMBER' ex='%2$u'\/>/g'

そして実際には%2$uはこのように置き換えられています

<ph name=NUMBER ex=%2/>

誰かが私に解決策を与えることができますか?前もって感謝します。

-ランジット

4

2 に答える 2

0

一重引用符で囲まれた文字列内に一重引用符を埋め込むことはできません。試す:

find . -name "*.txt" -print |
  xargs sed -i 's/%2$u/<ph name='"'"'NUMBER'"'"' ex='"'"'%2$u'"'"'\/>/g'

また

find . -name "*.txt" -print |
    xargs sed -i "s/%2\$u/<ph name='NUMBER' ex='%2\$u'\/>/g"

sedのバージョンによっては、$をsedにエスケープして、行末のみに一致しないようにする必要がある場合があります。

xargs sed -i "s/%2\\\$u/<ph name='NUMBER' ex='%2\\\$u'\/>/g"
于 2013-02-14T02:25:19.067 に答える
0

一重引用符で引用すると、次の一重引用符で引用が終了します。したがって、後者の式は実際には次の部分で構成されています。

's/%2$u/<ph name='
NUMBER
' ex='
%2$u
'\/>/g'

また、引用符で囲まれていない部分では、パラメーターの展開が行われます。パラメータ$uの値u、または存在しない場合は空の文字列に置き換えられます。これを簡単にテストできますecho

echo 's/%2$u/<ph name='NUMBER' ex='%2$u'\/>/g'

これを回避するには、別の引用技法を使用します。たとえば、単一引用符を含む部分には二重引用符を使用します (エスケープすることを忘れ$ないでください。そうしないと、展開が行われます)。

's/%2$u/<ph name='"'NUMBER'"' ex='"'%2\$u'"'\/>/g'

または、該当する場合は、置換された文字列内で二重引用符を使用します。

's/%2$u/<ph name="NUMBER" ex="%2$u"\/>/g'
于 2013-02-14T02:33:40.897 に答える