Linux
在文件中使用 sed 或 awk 更改日期格式
我有以下格式的文件
---------------------------------------- Name: cust foo mail: cust.foo@example.com Account Lock: FALSE Last Password Change: 20170721085748Z ---------------------------------------- Name: cust xyz mail: cust.xyz@example.com Account Lock: TRUE Last Password Change: 20181210131249Z ---------------------------------------- Name: cust bar mail: cust.bar@example.com Account Lock: FALSE Last Password Change: 20170412190854Z ---------------------------------------- Name: cust abc mail: cust.abc@example.com Account Lock: FALSE Last Password Change: 20191030080405Z ----------------------------------------
我想將
Last Password Change
數據格式更改為YYYY-MM-DD
但不確定如何使用sed
或awk
是否有任何其他方法,我可以嘗試循環它並使用date -d
選項但不確定是否有更簡單的方法來使用正則表達式
由於您所做的只是添加兩個破折號並刪除一些額外的字元,因此不需要
date
.$ sed -Ee 's/(Last Password Change: )(....)(..)(..).*Z/\1\2-\3-\4/' < foo.txt ... Name: cust foo mail: cust.foo@example.com Account Lock: FALSE Last Password Change: 2017-07-21 ...
對於更嚴格的模式,點(匹配任何字元)可以替換
[0-9]
為僅匹配數字。\1
等在替換當然擴展到括號中的模式匹配。
這是我的建議:
sed -E 's/([0-9]{4})([0-9]{2})([0-9]{2})[0-9]{6}Z/\1-\2-\3/' file
輸出:
Name: cust foo mail: cust.foo@example.com Account Lock: FALSE Last Password Change: 2017-07-21 ---------------------------------------- Name: cust xyz mail: cust.xyz@example.com Account Lock: TRUE Last Password Change: 2018-12-10 ---------------------------------------- Name: cust bar mail: cust.bar@example.com Account Lock: FALSE Last Password Change: 2017-04-12 ---------------------------------------- Name: cust abc mail: cust.abc@example.com Account Lock: FALSE Last Password Change: 2019-10-30 ----------------------------------------