用平面文件中的单引号括起一个字段

时间:2014-03-07 21:38:11

标签: linux sed

我的文件包含以下数据

65100435|2006-04-17|27542|2868.05|1092.38|10|223.476|2006-04-20|0|1125398|3|3|2868.05
65101085|2006-04-17|2572|1306.44|411.7|10|87.34|2006-04-20|0|1250623|3|3|1306.44

我需要做的是用下面的单引号括起日期字段。

65100435|'2006-04-17'|27542|2868.05|1092.38|10|223.476|2006-04-20'|0|1125398|3|3|2868.05
65101085|'2006-04-17'|2572|1306.44|411.7|10|87.34|'2006-04-20'|0|1250623|3|3|1306.44

任何人都可以用sed命令帮我吗?感谢

3 个答案:

答案 0 :(得分:3)

这可能适合你(GNU sed):

sed "s/....-..-../'&'/g" file

答案 1 :(得分:2)

使用awk,这非常简单:

awk 'BEGIN{FS=OFS="|"}{$2=q$2q;$8=q$8q}1' q="'" file

$ cat file
65100435|2006-04-17|27542|2868.05|1092.38|10|223.476|2006-04-20|0|1125398|3|3|2868.05
65101085|2006-04-17|2572|1306.44|411.7|10|87.34|2006-04-20|0|1250623|3|3|1306.44

$ awk 'BEGIN{FS=OFS="|"}{$2=q$2q;$8=q$8q}1' q="'" file
65100435|'2006-04-17'|27542|2868.05|1092.38|10|223.476|'2006-04-20'|0|1125398|3|3|2868.05
65101085|'2006-04-17'|2572|1306.44|411.7|10|87.34|'2006-04-20'|0|1250623|3|3|1306.44

答案 2 :(得分:1)

不是sed命令,但awk应该这样做。

awk -F\| '{for (i=1;i<=NF;i++) if ($i~/....-..-../) $i=Q$i Q}1' OFS=\| Q="'" file
65100435|'2006-04-17'|27542|2868.05|1092.38|10|223.476|'2006-04-20'|0|1125398|3|3|2868.05
65101085|'2006-04-17'|2572|1306.44|411.7|10|87.34|'2006-04-20'|0|1250623|3|3|1306.44

这将包含行上日期出现的任何字段。


awk可以与使用的potong使用相同的正则表达式:

awk '{gsub(/....-..-../,q"&"q)}1' q="'" file