我想转换
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
字符串x
,color
然后使用分组和反向引用来获得所需的结果。
答案3
这是awk如果你的颜色比较多,解决办法是:
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$0
ecord/field然后打印整个记录/字段导入文件作为输入文件。