我的文件包含以下数据
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命令帮我吗?感谢
答案 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