Sed使用正则表达式查找并替换模式中的字符

时间:2014-05-13 14:45:26

标签: regex bash sed

我有以下行,并希望用空格替换大写字母T.

"2013-07-26T11:44:06.000+02:00"

我尝试了以下脚本,但它不起作用:

sed 's/^"/[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]/T/""/g' file.csv

5 个答案:

答案 0 :(得分:5)

由于日期输出不会产生任何其他T,您可以选择:

sed 's/T/ /' file.csv

这将用空格替换第一个遇到的T.

答案 1 :(得分:3)

如何使用tr?:

tr 'T' ' ' < test.csv

但是,这非常脆弱,因为它会在其他不包含日期的列中替换T。我给出了这个答案,作为对此不敏感的数据的替代方案。对于所有其他情况,我更喜欢@ AvinashRaj的答案。

答案 2 :(得分:2)

试试这个,

sed -r 's/^\"([0-9]{4}-[0-9]{2}-[0-9]{2})(.)(.*)\"$/\"\1 \3\"/g' file

示例:

$ echo '"2013-07-26T11:44:06.000+02:00"' | sed -r 's/^\"([0-9]{4}-[0-9]{2}-[0-9]{2})(.)(.*)\"$/\"\1 \3\"/g'
"2013-07-26 11:44:06.000+02:00"

答案 3 :(得分:0)

使用tr

tr 't' ' ' <<< "2013-07-26T11:44:06.000+02:00"

答案 4 :(得分:0)

如果行以数字开头,这会将第一个'T'更改为空格。

sed '/^[0-9]/s/T/ /'