sed -iを使用してxmlファイルのポート値を置き換えました。
<property name="port" value="8954" />
しかし、正規表現を避ける方法がわかりません。正規表現は以下にあります。
(?<=name="port"\s+value=")\d+(?=")
私のコマンドは
sed -i "s/${PORTREX}/$NEWPORT/g" config.xml
ベストアンサー1
私はこれがすでに解決策であることに気づいていなかったので、これをコメントに書きました。 OPはうまくいくように書いたので、今回は答えとして:
sed "s/\(name=\"port\" *value=\"\)[0-9]*/\1$NEWPORT/g" config.xml
OPで提案された正規表現は、いくつかの非標準拡張を使用するため、機能しませんが、sed
必要ではありません。
sed -iを使用してxmlファイルのポート値を置き換えました。
しかし、正規表現を避ける方法がわかりません。正規表現は以下にあります。
- 「lookbehind」の代わりに文字列をそのまま使用できますが、サブ式としてマークして置換で再
(?<=somestring)
使用\(somestring\)
するので、\1
「これは必要ですが置き換えることはできません」と言う代わりに、単に置き換えてください。そしてそれ自体 - は(1つ以上発生)
+
の短縮語ですが、に\{1,\}
置き換えることもできます。この場合、単純を使用するとゼロ回発生が不可能になり、時間を節約できます。a+
aa*
*
- 私の考えでは、読書は読書
\d
よりも重要ではありません。[0-9]
\s
[[:space:]]
またはで置き換えることができます[ <literal tab>]
。ここの簡単なスペースがそれを行うでしょう
結論:ほとんどすべての正規表現の拡張は簡単に避けられ、わずかに冗長または読みにくいパターンが発生する可能性がありますが、一般に欠点はありません。1つの例外は貪欲ではない一致です。場合によっては、一致せずに別の概念が必要です。