【发布时间】:2017-03-20 23:27:31
【问题描述】:
我有一个由数字和逗号组成的模式,例如:123,45,2,14324。可以有任意位数,我无法知道两个逗号之间有多少位数。我需要用字母“k”替换每个数字,所以129,54,0,111 变为kkk,kk,k,kkk。只有当某个模式出现在它之前,我才需要替换它,并且它总是出现在这样的一行上:
mypattern:123,421,9,3 pattern_i_don't_need:1499,242,22,1
我需要替换mypattern:之后的每个数字,因此示例行需要更改为:
mypattern:kkk,kkk,k,k pattern_i_don't_need:1499,242,22,1
我只能使用 sed 和/或 grep。 到目前为止,我已经学会了如何替换相关行中的每个字符,如下所示:
sed '/^mypattern:/ s/[0-9]/k/g'
此版本查找以mypattern: 开头的行并替换该行上的每个数字。如何告诉 sed '停止'而不是替换空格和/或字母之后出现的任何数字?
【问题讨论】:
-
mypattern:kkk,kkk,k,k pattern_i_don't_need:1499,242,22,1总是在同一行?还是可以在不同的行中? -
是的,它总是在同一行;开头总是
mypattern,前面没有任何字符,然后是我需要用'k's替换的数字,然后是一些空格和字母(它们的数量不固定,每行可能不同),然后是更多不需要更改的带逗号的数字;这是一行。