我有一个文件,在该文件中,我必须根据特定的模式(电话号码)查找和更改字符串。准则是:
^\+[0-9]{3} \([0-9]{2}\) [0-9]{7}$当我在指挥中使用它时:
grep "^\+[0-9]{3} \([0-9]{2}\) [0-9]{7}$" -E filename它起作用了。但是,当我试图用sed中的所有括号替换所有空格并在13和15位置添加空格时,它不起作用,我也不知道为什么。
我的变体是:
sed '/^\+[0-9]{3} \([0-9]{2}\) [0-9]{7}$/s/[()]//' filename(仅用于替换括号)
sed -e '/^\+[0-9]{3} \([0-9]{2}\) [0-9]{7}$/s/[()]//' -e '/^+[0-9]{2} ([0-9]{2}) [0-9]{7}/s/./& /11;s/./& /14' filename档案结构:
+380 44 123 45 67
+380 (44) 1234567
+350 (56) 1454557
+330 (76) 1255557
+380 44 3534 45 67
+320 (45) 1237887
+310 (54) 1939997
adasd
asdddddddddddd
sssdad预期产出:
+380 44 123 45 67
+380 44 123 45 67
+350 56 145 45 57
+330 76 125 55 57
+380 44 3534 45 67
+320 45 123 78 87
+310 54 193 99 97
adasd
asdddddddddddd
sssdad发布于 2016-10-05 16:15:24
有一种方法可以做到:
$ cat ip.txt
+380 44 123 45 67
+380 (44) 1234567
+350 (56) 1454557
+330 (76) 1255557
+380 44 3534 45 67
+320 (45) 1237887
+310 (54) 1939997
adasd
asdddddddddddd
sssdad
$ sed -E 's/^(\+[0-9]{3}) \(([0-9]{2})\) ([0-9]{3})([0-9]{2})([0-9]{2})$/\1 \2 \3 \4 \5/' ip.txt
+380 44 123 45 67
+380 44 123 45 67
+350 56 145 45 57
+330 76 125 55 57
+380 44 3534 45 67
+320 45 123 78 87
+310 54 193 99 97
adasd
asdddddddddddd
sssdad()环绕一个模式,以便在替换部分中可以反向引用它们中匹配的文本。\1对应于第一个这样的捕获组,\2对应于第二个,等等。(或)本身,我们需要像\(和\)那样使用转义(),因此它们不是输出的一部分。https://stackoverflow.com/questions/39878653
复制相似问题