+正则表达式在sed中不起作用

时间:2018-04-19 05:24:51

标签: regex linux sed

我有一个包含数据的文件,如下所示。

[root@ip-12-32-8-15 ~]# cat dbbackup

(555)555-1212

(555)555-1213

预期输出:

First: (555) Second: 555- Third: 1212

First: (555) Second: 555- Third: 1213

我正在使用它不起作用。

sed -n -e 's/\([0-9]+)\)\([0-9]+-\)\([0-9]+\)/First: \1 Second: \2 Third: \3/p' dbbackup

请让我知道如何实现上述输出。

3 个答案:

答案 0 :(得分:1)

在GNU awk(FIELDWIDTHS)中,没有正则表达式:

$ awk 'BEGIN{FIELDWIDTHS="5 4 4"}{print "First:",$1,"Second:",$2,"Third:",$3}' file
First: (555) Second: 555- Third: 1212
First: (555) Second: 555- Third: 1213

sed中的另一个:

$ sed 's/^/First: /1;s/./& Second: /12;s/./& Third: /25' file
First: (555) Second: 555- Third: 1212
First: (555) Second: 555- Third: 1213

答案 1 :(得分:0)

您忘记了第一个字段前的左括号。但这并不是它不起作用的原因 它不起作用,因为sed不知道+。请改用*

sed -n -e 's/\(([0-9]*)\)\([0-9]*-\)\([0-9]*\)/First: \1 Second: \2 Third: \3/p'

答案 2 :(得分:0)

这可能适合你(GNU sed):

sed -r 's/$/\nfirst:second:third:fourth:\n/;:a;s/^([(0-9]+[)-]?)([^\n]*\n)([^:]*:)(.*)/\2\4 \3 \1/;ta;s/\n.*\n //' file

此方法将字符串前面的数字与追加到行尾的字符串匹配,然后将它们附加到引入行的末尾。最终没有更多数字要删除,然后删除引入的换行符/最终空格,留下所需的字符串。

N.B。可以附加其他字符串以用于更多数字。