[英]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.