将空格附加到正则表达式匹配的命令行命令

将空格附加到正则表达式匹配的命令行命令

我想向文本文件中找到的正则表达式模式的每个匹配项添加空格。

例子:

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/替换第一次出现的foobar如果你想搭配全部给定行的情况下,使用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

相关内容