如何标记文本的出现?

如何标记文本的出现?

我想转换

blue blue red green

到:

color.1=blue color.2=blue color.3=red color.4=green

有什么线索可以解决这个问题吗?sed、awk 等?

答案1

在 Bash 中:

colors="blue blue red green"
i=1
for c in $colors; do
    echo -n "color.$((i++))=$c "
done

命令行版本(易于复制并粘贴到终端)包含两行 - 首先设置变量,然后设置主脚本:

colors="blue blue red green"; i=1
for c in $colors; do echo -n "color.$((i++))=$c "; done

答案2

这是一个 Python 方法:

#!/usr/bin/env python2
input_string = 'blue blue red green'
count = 1
for value in input_string.split():
    print 'color.{0}={1}'.format(count, value),
    count += 1

输出: color.1=blue color.2=blue color.3=red color.4=green

这里有一种sed方法:

$ n=1;x=color;echo "blue blue red green" | sed -rn "s/^([^ ]+) ([^ ]+) ([^ ]+) ([^ ]+)$/$x\.$n=\1 $x\.$((n+1))=\2 $x\.$((n+2))=\3 $x\.$((n+3))=\4/p" 

输出: color.1=blue color.2=blue color.3=red color.4=green

这里我们使用变量n来存储1字符串xcolor然后使用分组和反向引用来获得所需的结果。

答案3

这是如果你的颜色比较多,解决办法是:

awk '{ printf("color.%d=%s ",NR, $0 ) }' RS='[[:blank:]]+' infile
color.1=blue color.2=blue color.3=red color.4=green

RS将空格/制表符定义为R记录年代带有出现一次或多次的分隔符+。然后printf命令打印当前数量R$0ecord/field然后打印整个记录/字段导入文件作为输入文件。

相关内容