将字添加到文件中所有记录共有的字段

时间:2010-09-30 07:16:07

标签: shell unix

我想在空格分隔的文件的字段1中添加一个单词,例如

我的文件,包含两个字段:

apple:fruit:tree
orange:fruit:tree
mango:fruit:tree
brinjal:vegetable:plant
potato:vegetable:root

现在我想在字段1中添加以空格分隔的单词“family”。

因此,生成的文件应该看起来像这样

apple family:fruit:tree
orange family:fruit:tree
mango family:fruit:tree
brinjal family:vegetable:plant
potato family:vegetable:root

对此的任何想法都将不胜感激。

谢谢,

2 个答案:

答案 0 :(得分:2)

使用可以sed:

sed 's/:/ family:/' yourfile.txt

这会将:替换为family:,从而达到预期的效果。您可能必须调整正则表达式,以防:也出现在文本的其他位置。

更新:我不确定你想要什么我想在“空格分隔的文件的字段1中添加”活动“字样,因为你没有给出任何例子为此。

更新2:
它只会替换:的第一次出现。但是,如果要替换中间的内容,则只需在分隔符之前捕获数据:

sed 's/^\(.*:.*\):/\1 family:/' test.txt

此示例在第三个字段之前添加family\(.*:.*\)捕获第一个:之前和之后的字符(即第一个和第二个字段的值)。以下:将替换为此字符(\1指的是第一个捕获组),后跟family:。该线的其余部分保持不变。

答案 1 :(得分:2)

使用awk

$ awk -F":" '{$1=$1" family"}1' OFS=":" file
apple family:fruit:tree
orange family:fruit:tree
mango family:fruit:tree
brinjal family:vegetable:plant
potato family:vegetable:root

如果您想要添加到第二个字段,请执行$2=$2" family"。它比创建正则表达式更容易,例如使用sed。

现在我可以将您重定向到awk manual以了解awk。下次尝试自己动手。