我有一个带有标识符的行,然后是一个模式(在我的例子中,是一个分号),然后是一个数字列表:
echo "sp16;111111111111111111111111111111211"
我想在所有数字之间插入一个分号,如(期望的输出):
echo "sp16;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;2;1;1"
到目前为止,我发现了如何使用sed
在所有字符之间插入分号:
sed 's/.\{1\}/&;/g'
但是,它也会在匹配第一个分号之前插入分号,并且在行尾添加分号。
6条答案
按热度按时间sz81bmfz1#
使用
Perl
的一行程序:正则表达式匹配如下:
^
(
[^;]+
;
(1次或多次(匹配最大可能量));
)
(
[0-9]+
)
Perl的代码解释
$1
.
join ";",
split "", $2
e
bxjv4tth2#
使用GNU
sed
:输出:
参见:
man sed
和The Stack Overflow Regular Expressions FAQfbcarpbf3#
使用任何awk:
9o685dep4#
下面是另一个
sed
命令,适用于任何sed
版本:下面是一个建议的
awk
解决方案:xnifntxz5#
这可能对你有用(GNU sed):
分头行动。
用换行符替换第一个分隔符
;
,并复制。在每个字内字符之间插入
;
。将结果附加到原始副本中。
用
;
替换两个引入的换行符之间的所有内容。如果第一个标识符总是4个字符:
h43kikqp6#