我有一个文本文件,其中每一行都有一个日期字符串 "2014-06-01T03:11:00Z "。我想使用 sed 将其替换为 "2014-06-01 03:11Z "。
我一直在尝试使用这段代码,但它让我失望了:
sed -i 's/[0-9]-[0-9]-[0-9]T[0-9]:[0-9]:[0-9]Z/[0-9]-[0-9]-[0-9] [0-9]:[0-9]Z/g' \
/home/aaron/grads/data/metars/${YMD}/latest.metars
最佳答案
您的数字子表达式仅匹配一个数字,但日期包含 2 或 4 位数字。匹配日期的简单版本是:
sed -i 's/\([0-9]*-[0-9]*-[0-9]*\)T\([0-9]*:[0-9]*\):[0-9]*Z/\1 \2Z/g' \
/home/aaron/grads/data/metars/${YMD}/latest.metars
但是,这会在每个需要数字的位置匹配零个或多个数字。您真的想坚持每个段中的正确位数。一个更精炼的版本是:
sed -i 's/\([0-9]\{4\}-[0-9]\{2\}-[0-9]\{2\}\)T\([0-9]\{2\}:[0-9]\{2\}\):[0-9]\{2\}Z/\1 \2Z/g' \
/home/aaron/grads/data/metars/${YMD}/latest.metars
并且由于您的 sed
支持 -i
而无需指定备份后缀(因此它可能是 GNU sed
),您可能可以缩写为:
sed -r -i 's/([0-9]{4}-[0-9]{2}-[0-9]{2})T([0-9]{2}:[0-9]{2}):[0-9]{2}Z/\1 \2Z/g' \
/home/aaron/grads/data/metars/${YMD}/latest.metars
关于linux - Sed:替换日期格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23977052/