Linux
Linux sed 正則表達式轉義
我使用 sed -i 替換 xml 文件中的埠值,
<property name="port" value="8954" />
但我不知道如何逃避正則表達式,我的正則表達式在下面。
(?<=name="port"\s+value=")\d+(?=")
我的命令是
sed -i "s/${PORTREX}/$NEWPORT/g" config.xml
我在評論中寫了這個,因為我沒有意識到這已經是解決方案。OP 寫道它有效,所以這次作為答案:
sed "s/\(name=\"port\" *value=\"\)[0-9]*/\1$NEWPORT/g" config.xml
OP 建議的正則表達式使用了幾個非標準擴展,因此它不適用於
sed
,但您不需要它們:我使用 sed -i 替換 xml 文件中的埠值,
但我不知道如何逃避正則表達式,我的正則表達式在下面。
- 而不是“lookbehind”
(?<=somestring)
,您可以按原樣使用字元串,但它會將\(somestring\)
其標記為子表達式並在替換中重用它 as\1
,因此不要說“這需要存在,但不能被替換”,只需替換它與自己+
是\{1,\}
(一次或多次出現)的快捷方式,但您也可以替換a+
為aa*
. 在這種情況下,使用 simple 可能更省事*
,因為零出現是不可能的- 在我看來,這
\d
並不比閱讀更好[0-9]
\s
可以替換為[[:space:]]
或[ <literal tab>]
。這裡有一個簡單的空格就可以了**結論:幾乎所有 reg-ex 擴展都可以輕鬆避免,可能會給出一些冗長的模式或難以閱讀,但通常沒有缺點。**一個例外是非貪婪匹配:在某些情況下,您需要一個沒有它們的不同概念。