0

我想在命令行上进行字符串替换。我可以在 Python 中执行此操作,但如果我仅在 Unix 中执行此操作,我的工作流程会更容易。目前我正试图让它与sed.

我正在尝试删除由单引号引起来的任何信息。在引号内,我有不同的字母、数字、空格、破折号、方括号、下划线和分号组合。

这是一个例子......

(214016:0.13461,814430:0.04526)'o__stuff; f__[morestuff-123]':0.03063

在python中,我可以做到这一点......

line = "(214016:0.13461,814430:0.04526)'o__stuff; f__[morestuff-123]':0.03063"
sub(r"\'[ \w;\-\[\]]+\'","",line)

哪个正确打印...

(214016:0.13461,814430:0.04526):0.03063

我现在正在尝试使用 来做到这一点sed,到目前为止,这对我来说还没有成功。我一直在尝试使用本教程,这很有帮助。这就是我所拥有的...

sed "s/\'[-[:alnum:] ;\[\]]+\'//g" file.txt

这行不通。对出了什么问题有任何想法吗?

谢谢你的帮助!

4

2 回答 2

1

这可能对您有用(GNU sed):

sed 's/'\''[^'\'']*'\''//g' file

NB 表达式'\''是一个 shell 设备来表示单个'

sed "s/'[^']*'//g" file

也可以。

于 2013-04-14T09:52:23.583 回答
1

您需要将破折号放在正则表达式的第一个或最后一个;两个字符之间的破折号定义了一个字符范围,即使其中一个是反斜杠也是如此。

同样,要匹配文字右方括号,请将其放在首位(在任何否定或破折号之后)。在传统的正则表达式中,反斜杠只是字符范围内的文字反斜杠,您可以通过将任何特殊字符(破折号、方括号)放在第一位或最后一位来消除歧义。

哦,失去;的无用使用cat

sed "s/\'[-][[:alnum:];]+\'//g" file.txt

你真的需要每行替换多次出现吗?如果不是,则该/g标志是多余的(但大多数情况下是无害的)。

于 2013-04-14T08:25:07.710 回答