我有一个由数字和逗号组成的模式,如下所示: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停止'并且不能替换空格和/或字母后出现的任何数字?
答案 0 :(得分:3)
您可以使用这样的sed命令:
sed -r ':a s/(mypattern:[k,]*)[0-9]/\1k/; t a' yourfile
:a
是t a
在s
进行替换时跳转到的标签因此你有一个"循环":
while s has replaced one digit with a "k":
try again to:
replace another digit after
"mypattern:" and an optional sequence of "k" and comma:
with k
答案 1 :(得分:0)
您可以使用awk:
awk '/^mypattern/ && gsub(/[0-9]/,"k",$1)' file
同样的概念只是awk为您提供了处理由空格分隔的第一列数据的选项。