[英]sed to modify only first column in a file but not the first occurrence if it matches
我只想更新文件中的第一列,而不要更新第一次。 以下是我当前用于更新第一次出现的代码。
修改日期的首次出现
sed 's/\(....\)-\(..\)-\(..\)/\2\/\3\/\1/'
我遇到一些问题,例如有时日期的格式正确,该格式在第一列中,因此上面的代码正在修改第三或第四列中的日期,因为它是第一次出现。 我不要
下面是我在做什么:
2018-09-14^Aaaa^Aq^ATEST^Abc^2018-09-14^A1^2018-09-14
sed 's/\(....\)-\(..\)-\(..\)/\2\/\3\/\1/'
2018/14/09^Aaaa^Aq^ATEST^Abc^2018-09-14^A1^2018-09-14
我文件中的某些行格式正确,而有些行格式不正确。 因此,我只想修改文件中不匹配“ yyyy / mm / dd”格式的第一列,而忽略它是否已经采用“ yyyy / mm / dd”格式。
我想要的输出
$cat test.csv
2018/14/09^Aaa^Aa^ATEST^Abc^2018-09-14^A1^2018-09-14
2018-09-14^Aaa^Aa^ATEST^Abc^2018-09-14^A1^2018-09-14
To
$ cat output_test.csv
2018/14/09^Aaa^Aa^ATEST^Abc^2018-09-14^A1^2018-09-14
2018/14/09^Aaa^Aa^ATEST^Abc^2018-09-14^A1^2018-09-14
使用GNU sed:
$cat test.csv |sed -E 's/^(\w+)-(\w\w)-(\w\w)/\1\/\3\/\2/'
然后进行真正的编辑:
$ sed -i -E 's/^(\w+)-(\w\w)-(\w\w)/\1\/\3\/\2/' test.csv >output_test.csv
对于-E
,使用GNU或OSX / BSD来启用ERE:
$ sed -E 's:^([^-]+)-([^-]+)-([^^]+):\1/\3/\2:' test.csv
2018/14/09^Aaa^Aa^ATEST^Abc^2018/14/09^A1^2018-09-14
2018/14/09^Aaa^Aa^ATEST^Abc^2018-09-14^A1^2018-09-14
添加开头为(^)模式以匹配:
sed 's/^\(....\)-\(..\)-\(..\)/\1\/\3\/\2/' file
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.