任何人都可以解释“sed-regex here”中发生的事情
发布时间:2020-12-14 01:28:51 所属栏目:Linux 来源:网络整理
导读:我正在使用正则表达式练习sed命令,但结果并不像预期的那样.我在mac Sierra上使用终端. 这是输入数据: Mark watermellons 12Robert pears 4Terry oranges 9Lisa peaches 7Susy oranges 12Mark grapes 39Anne mangoes 7Greg pineapples 3Oliver rockmellons 2
我正在使用正则表达式练习sed命令,但结果并不像预期的那样.我在mac Sierra上使用终端.
这是输入数据: Mark watermellons 12 Robert pears 4 Terry oranges 9 Lisa peaches 7 Susy oranges 12 Mark grapes 39 Anne mangoes 7 Greg pineapples 3 Oliver rockmellons 2 Betty limes 14 我正在尝试交换第一列和第二列.我使用了这个命令: sed 's/(.+) (.+) /2 1/ ' file.txt 此命令返回相同的输入.但是当我使用时, sed 's/(.*) (.*) /2 1 /' file.txt 列正在交换.为什么“”不匹配,因为每行至少有一个字符. 也, sed 's/(.*) (.*)/2 1 /' file.txt 第一个括号是捕获前两列,第二个是最后一列,为什么第一个括号没有捕获第一列? 解决方法
问题不在于你对正则表达式和贪婪匹配等方面的理解.问题只是在问题中的示例使用中没有实现.
在sed中,默认情况下,并不意味着“一个或多个前一个符号”,因为您可能会使用其他正则表达式语法. sed -E 's/(.+) (.+) /2 1/ ' file.txt 还要注意,这基本上只是一个捷径, sed 's/(..*) (..*) /2 1/' file.txt 顺便说一句,总是要注意BSD sed和GNU sed之间的区别. sed 's/(.+) (.+) /2 1/ ' file.txt 这篇文章的前两个解决方案在GNU和BSD sed中都有效.只要有可能,最好选择适合两者的语法,防止各种调试地狱. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |