如何保留 sed 's/(.*)/?/g', 中的字符串?是什么?

问题描述 投票:0回答:3

字符串是“>ABCD EFG;” 。我想通过shell命令“sed”将

>, ,;,
更改为
_,;,!
,该怎么做?

我尝试,

echo  ">ABCD EFG;" |sed 's#>(.*) (.*);$#_$1;$2!#g'
结果是
>ABCD EFG;
$1 和 $2 是错误的吗? 没用!

shell sed
3个回答
2
投票

Sed 默认使用基本正则表达式(BRE)。这意味着您需要转义某些字符。

这个

>(.*) (.*);$
正则表达式可以使用扩展正则表达式(ERE、
-E
)来工作,但使用 BRE 时看起来就像
>\(.*\) \(.*\);$

其次,替换语法使用

\
而不是
$
(来自 sed 的手册页):

替换可能包含特殊字符 & 来引用模式空间中匹配的部分,并通过 \9 进行特殊转义来引用正则表达式中相应的匹配子表达式。

因此,使用 BRE 的 sed 命令应该如下所示(请注意,命令

g
不是强制性的,因为在您的示例中,您需要每行进行一次此修改):

sed 's/>\(.*\) \(.*\);$/_\1;\2!/'

0
投票

我想把 >, ,;, 改为 _,;,!

为什么不使用

tr
,例如:

<<<">ABCD EFG;" tr '> ;' '_;!'

输出:

_ABCD;EFG!

0
投票

当您想使用

sed
时,您可以在

等命令之间进行选择
# 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/> ;/_;!/'

您不会经常在

sed
中看到“y”运算符,因为
tr
命令做得非常出色。 @Thor 在他的回答中表明,其中
<<<">ABCD EFG;"
是一种有效的书写方式
echo ">ABCD EFG;"|

© www.soinside.com 2019 - 2024. All rights reserved.