Regex 使用Sed正则表达式删除字符串
我想在命令行上进行字符串替换。我可以在Python中完成这项工作,但如果我只在Unix中完成这项工作,我的工作流程会更容易。目前,我正在尝试使用Regex 使用Sed正则表达式删除字符串,regex,unix,sed,Regex,Unix,Sed,我想在命令行上进行字符串替换。我可以在Python中完成这项工作,但如果我只在Unix中完成这项工作,我的工作流程会更容易。目前,我正在尝试使用sed 我正在尝试删除单引号包围的任何信息。在引号中,我有字母、数字、空格、破折号、方括号、下划线和分号的不同组合 这里有一个例子 (214016:0.13461,814430:0.04526)'o__stuff; f__[morestuff-123]':0.03063 在python中,我可以这样做 line = "(214016:0.13461,8
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
这不管用。有什么想法吗
谢谢你的帮助 您需要将破折号放在正则表达式的第一个或最后一个;两个字符之间的破折号定义字符范围,即使其中一个字符是反斜杠 类似地,要匹配文字右方括号,请将其放在第一位(在任何否定或破折号之后)。在传统的正则表达式中,反斜杠只是字符范围内的文字反斜杠,您可以通过将任何特殊字符(破折号、方括号)放在第一位或最后来消除歧义 哦,失去你的爱 是否确实需要替换每行的多个引用?如果没有,则
/g
标志是多余的(但大部分是无害的)。这可能对您有用(GNU-sed):
注意:表达式'\'
是一个shell设备,用于表示单个'
sed "s/'[^']*'//g" file
同样有效。谢谢,修复了无效字符范围错误。我将从问题中删除这一部分。请不要改变问题,除非澄清它。也许这是一个边缘案件,但在这方面,Dar,仍然不起作用。是的,这是一条包含大约100个模式实例的单行线,因此/g很有用。关于编辑的适当说明。
sed“s/\'[-[A-Za-z0-9_;]*//g
有效,但是当我尝试添加方括号时失败了……等等,我不知道为什么,但是sed“s/\'[-[A-Za-z0-9_;]*//g
去掉了方括号。所以这就是答案……正如我看到的,[]
,不是吗?小问题:不要使用cat file | sed…
!而是使用sed…file
!这是真的,我要补充一点。但是,它仍然不起作用…谢谢你的帮助。谢谢波东,两者都很好用!我是新来的regex…我猜[^']
指定了“匹配除单引号外的任何字符”,然后它是特定的,因为它正在查找由单引号包围的目标
sed 's/'\''[^'\'']*'\''//g' file
sed "s/'[^']*'//g" file