我想向文本文件中找到的正则表达式模式的每个匹配项添加空格。
例子:
xadsfa 1 - 2 --- --- --- AB
jklhwj 3 --- --- --- asdfh
weriulceh 2 - 4 --- --- --- asdf
我想匹配“1 -2”或“2 - 4”。我想出了这个模式:
[0-9]\s-\s[0-9]
现在我想在每场比赛中添加一个空格,如下所示:
xadsfa 1 - 2 --- --- --- AB
jklhwj 3 --- --- --- asdfh
weriulceh 2 - 4 --- --- --- asdf
答案1
对于像这样的工具来说这很简单sed
:
$ sed 's/[0-9]\s-\s[0-9]/& /' file
xadsfa 1 - 2 --- --- --- AB
jklhwj 3 --- --- --- asdfh
weriulceh 2 - 4 --- --- --- asdf
该运算符将在输入文件的每一行中s/foo/bar/
替换第一次出现的foo
。bar
如果你想搭配全部给定行的情况下,使用g
: s/foo/bar/g
。这&
是“匹配的内容”,因此s/[0-9]\s-\s[0-9]/& /
将用匹配的内容加上一个空格替换正则表达式的第一个匹配项。
请注意,如果您只是匹配单个空格(不是制表符或其他空格),则没有理由使用\s
.只需使用空格:
sed 's/[0-9] - [0-9]/& /' file
最后,要对文件本身进行更改,请使用-i
(这假设 GNU sed
,语法在其他实现上略有不同;此外,这将用 sed 操作的结果替换您的文件。在添加之前确保它执行您需要的操作-i
):
sed -i 's/[0-9] - [0-9]/& /' file