[英]Is it possible to use the matched string in sed as an input to shell date command?
我有一個包含記錄的文件,其中包含GMT偏移的時間戳字段。 我想使用sed
命令將記錄上的值替換為常規時間戳(沒有GMT偏移量)。
例如:
`$date -d '2012/11/01 00:50:22 -0800' '+%Y-%m-%d %H:%M:%S'`
返回此值,這是我想要做的:
2012-11-01 01:50:22
除非我想在此文件的每一行上執行該操作,並將date命令應用於timestamp值。 這是一個示例記錄:
"SB","6GV96644X48128125","","","","T0006",2012/10/03 13:08:43 -0700,"NJ"
這是我的代碼:
head -1 myfile | sed 's/,[0-9: /\-]\{25\},/,'"`date -d \1 '+%Y-%m-%d %H:%M:%S'`"',/
這不起作用:它只是忽略\\ 1並用今天的日期替換匹配的模式:
"SB","6GV96644X48128125","","","","T0006",2012-11-14 01:00:00,"NJ"
我希望\\1
會導致匹配的模式傳遞給date函數並返回一個常規時間戳值(如上面提供的示例,顯示日期函數如何應用GMT偏移量並返回常規stimestamp字符串)並將替換記錄中的舊值。
我會用awk
代替。 例如:
awk '{cmd="date -d \""$7"\" \"+%Y-%m-%d %H:%M:%S\"";
cmd | getline k; $7=k; print}' FS=, OFS=, myFile
這將使用在第7個字段的原始內容上運行date命令的結果替換第7個字段。
在sed
:
head -1 datefile |
sed '
# handle % in input correctly
s/%/%%/g
# execute date(1) command
s/\(.*,\)\([0-9: /\-]\{25\}\)\(,.*\)/'"date -d '\2' '+\1%Y-%m-%d %H:%M:%S\3'"'/e'
'
這可能適合你(GNU sed):
sed -r 's/^(([^,]*,){6})([^,]*)(.*)/printf "%s%s%s" '\''\1'\'' $(date -d '\''\3'\'' '\''+%Y-%m-%d %H:%M:%S'\'') '\''\4'\''/e;q' file
采用
head -1 datefile | sed -e 's?\(..\)/\(..\)/\(.... ..:..:..\)?'"date -d '\2/\1/\3' '+%s'"'?e'
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.