0

我正在探索 sed 函数(我知道我之前曾问过类似的问题,但鉴于我在 regex 方面非常糟糕,我需要很多帮助,但这并不意味着我没有尝试我)

我这里有一个简单的文本文件,如下所示

ID,水果名称和数量。

这次我想通过查找水果名称分别在每个水果的数量后面加上水果的价格。

水果.txt

1,apple,50
2,banana,40

我试过这个命令

sed -i -r "s/(apple.*)([,0-9]*)/\1,5/" "fruit.txt"

所以在第一个输入

 sed -i -r "s/(apple.*)([,0-9]*)/\1,5/" "fruit.txt"

我的文本文件(clothes.txt)会变成这样

1,apple,50,5
2,banana,40

在第二个输入

 sed -i -r "s/(apple.*)([,0-9]*)/\1,30/" "fruit.txt"

我的文本文件(clothes.txt)会变成这样

1,apple,50,5,30
2,banana,40

我怎么让它变成这样。

预期产出

sed 命令的第一个输入

我的文本文件(fruit.txt)会变成这样

1,apple,50,5
2,banana,40

在 sed 命令的第二个输入

我的文本文件(fruit.txt)会变成这样

1,apple,50,30
2,banana,40
4

2 回答 2

0

不要说[,0-9]*,确保你只匹配一个,。你可以说:

sed -i -r 's/(apple,[^,]*).*/\1,15/' filename

这里的说法(apple,[^,]*)将把apple后面跟一个,后面的任何不是a的东西,放到一个组中。将.*匹配剩余的所有内容。

这会改变

1,apple,50,5
2,banana,40

1,apple,50,15
2,banana,40
于 2013-10-29T04:57:35.997 回答
0

用这个:

sed -i -r "s/(apple,[0-9]*).*/\1,30/" "fruit.txt"

这里,\1是一个反向引用。它匹配第一个捕获组。

之前,您的第一个捕获组匹配太多。

于 2013-10-29T04:56:31.993 回答