sed正则匹配问题:移除T后内容但保留Start Time字段
问题
原始CSV数据如下:
"Reserved DB Instances","State","Start Time" "alpha-db-dev-26aug2021","active","2021-08-26T06:29:11.121000+00:00" "beta-db-dev-26aug2021","active","2021-08-26T09:30:49.669000+00:00" "charlie-db-dev-8dec2021","active","2021-12-08T06:36:26.307000+00:00"
需求:移除日期中T之后的所有内容,但保留表头里的"Start Time"字段。
之前尝试的命令存在问题:
- 执行
sed -e s/[0-9]T.*//g csvtest2.csv会误删日期的最后一位数字; - 执行
sed -e s/T.*//g csvtest2.csv虽然日期处理正确,但会截断表头的"Time"部分。
期望得到的正确输出:
"Reserved DB Instances","State","Start Time" "alpha-db-dev-26aug2021","active","2021-08-26" "beta-db-dev-26aug2021","active","2021-08-26" "charlie-db-dev-8dec2021","active","2021-12-08"
正确的sed命令
可以使用以下sed命令实现需求:
sed '1!s/T.*//' csvtest2.csv
命令解释:
1!:表示不对第1行(表头)执行后续替换操作,确保表头的"Start Time"完整保留;s/T.*//:对第2行及以后的内容,将T及其后面的所有字符替换为空,精准截断日期到T之前的部分,不会误删日期数字。
如果需要直接修改原文件(建议先备份原文件),可添加-i参数:
sed -i '1!s/T.*//' csvtest2.csv
内容的提问来源于stack exchange,提问作者Gifter Villanueva
相关产品推荐
相关产品推荐

