[英]Using sed to substitute mathematical expressions
您在 regex101.com 選擇了 PCRE2 選項,而sed
僅支持 POSIX 正則表達式風格。
在這里,您使用的是 POSIX BRE 風格,因此表達式看起來像
#!/bin/bash
s="( - xi**2 + 2*xi - 1)"
sed 's/( - xi\*\*2 + 2\*xi - 1)/k1/g' <<< "$s"
請參閱在線演示。 在 POSIX BRE 中,這個表達式意味着:
(
- a (
char(未轉義時,匹配(
char)- xi
- 固定字符串\*\*
- **
字符串( *
是 POSIX BRE 中的量詞,表示零個或多個)2 + 2
- 一個固定的2 + 2
字符串,因為+
在 POSIX BRE 中只是一個+
字符\*
- *
字符xi - 1)
- 文字xi - 1)
固定字符串, )
在 POSIX BRE 中匹配文字)
字符。 如果您打算使用 POSIX ERE,則需要在正則表達式中轉義(
, )
和+
:
sed -E 's/\( - xi\*\*2 \+ 2\*xi - 1\)/k1/g'
請注意-e
(表示接下來是要執行的命令的腳本)和-E
(表示正則表達式風格是 POSIX ERE)之間的區別。
使用您顯示的示例,請嘗試在sed
中進行以下操作。 由於您正在進行模式匹配,那么恕我直言,我們可以匹配模式而不是進行替換,然后簡單地打印新值(通過保持所有行的打印關閉,直到我們要求sed
打印)。
s="( - xi**2 + 2*xi - 1)"
sed -n 's/( - xi\*\*2 + 2\*xi - 1)/k1/p' <<< "$s"
說明:通過sed
中的-n
選項停止打印行,然后在主程序中使用正則表達式( - xi\*\*2 + 2\*xi - 1)
根據要求進行匹配,如果找到匹配則在 output 中打印k1
。
使用sed
$ sed 's/( - \(xi\)\(\*\)\22 + 2\2\1 - 1)/k1/' <(echo "( - xi**2 + 2*xi - 1)")
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.