# Use \1 en \2 to paste remembered strings
echo ">ABCD EFG;"| sed -E 's/>(.*) (.*);/_\1;\2!/'
# Replace characters anywhere in the string
# Since you are replacing in 3 steps, replace the ' ' at the end.
echo ">ABCD EFG;"| sed -E 's/>/_/g; s/;/!/g; s/ /;/g'
# Special y operator
echo ">ABCD EFG;"| sed 'y/> ;/_;!/'
3条答案
按热度按时间bfrts1fy1#
默认情况下,Sed使用基本正则表达式(BRE)。这意味着你需要转义一些字符。
这个
>(.*) (.*);$
正则表达式可以使用扩展正则表达式(ERE,-E
),但看起来像使用BRE的>\(.*\) \(.*\);$
。其次,替换语法使用
\
而不是$
(来自sed的手册页):替换可以包含特殊字符&来引用匹配的模式空间部分,以及特殊转义符\1到\9来引用正则表达式中相应的匹配子表达式。
因此,使用BRE的sed命令应该如下所示(注意,命令
g
不是强制性的,因为在您的示例中,您需要每行修改一次):字符串
tzxcd3kk2#
我想把>,,;,改成_,;,!
为什么不使用
tr
,例如:字符串
输出量:
型
vmdwslir3#
当您想要使用
sed
时,可以在以下命令之间进行选择,字符串
你不经常在
sed
中看到'y'运算符,因为tr
命令做得很好。@Thor在他的回答中展示了这一点,其中<<<">ABCD EFG;"
是写echo ">ABCD EFG;"|
的有效方法。