sed,在第一个数字之前插入空格,但前提是不存在空格

sed, insert whitespace before first number but only if whitespace is not present

遗憾的是,这需要通过 sed,据我所知,反向匹配不起作用。

我有一个不正确的字符串,我需要在其中插入一个 space,这个不正确的字符串可以采用以下格式:

>=5.0.0 <= 7.0.0
>5.0.0 <= 7.0.0
=5.0.0 <= 7.0.0

我需要在第一个数字前插入一个 space,并且只有在不存在白色 space 的情况下(我们有数百个正确的字符串,所以双白色 spaces 会破坏它们)。
期望的输出是

>= 5.0.0 <= 7.0.0
> 5.0.0 <= 7.0.0
= 5.0.0 <= 7.0.0

我尝试过分组,但不太了解:

echo $testString |sed 's/\(\S\)\w/ &/'
>= =5.0.0 < 7.0.0

如果您对 awk 没问题,能否请您尝试按照所示示例进行编写和测试。

awk '!/^[>]?[=]? [0-9]/{sub(/[>]?[=]?/,"&"OFS)} 1' Input_file

awk '/^[>]?[=]?[0-9]/{sub(/[>]?[=]?/,"&"OFS)} 1' Input_file

OR sed 使用相同的正则表达式:

sed -E '/^[>]?[=]?[0-9]/s/^[>]?[=]?/& /' Input_file

我还想建议另一个正则表达式。

sed -E 's/([<>=]+)([0-9])/ /g' file

这取决于该行的开头还有什么,但这使用 POSIX 字符 class 表示法并且涵盖了比仅显示在关系运算符中的关系运算符更多的字符序列示例数据:

sed -e 's/\([^[:space:][:digit:]]\{1,\}\)\([[:digit:]]\)/ /' <<'EOF'
>=5.0.0 <= 7.0.0
>5.0.0 <= 7.0.0
=5.0.0 <= 7.0.0
EOF

输出:

>= 5.0.0 <= 7.0.0
> 5.0.0 <= 7.0.0
= 5.0.0 <= 7.0.0

正则表达式在一行的开头查找一个或多个 'not space, not digit' 个字符的序列,后跟一个数字,并在数字前插入一个 space。