簡體   English   中英

使用sed代入數學表達式

[英]Using sed to substitute mathematical expressions

我正在努力使用 sed 來替換數學表達式。 因為即使正則表達式\( \- xi\*\*2 \+ 2\*xi \- 1\)匹配字符串 "( - xi**2 + 2*xi - 1)" sed 也不執行代換:

echo "( - xi**2 + 2*xi - 1)" | sed -e 's/\( \- xi\*\*2 \+ 2\*xi \- 1\)/k1/g'

請指教。

您在 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM