繁体   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