给定一个XML文件,我正在编写Bash来解析它,但需要创建一个头并分解一个日期字符串吗?

给定一个XML文件,我正在编写Bash来解析它,但需要创建一个头并分解一个日期字符串吗?,xml,bash,grep,sh,Xml,Bash,Grep,Sh,给定一个XML文件,我正在编写Bash来解析它,但需要有关头文件和断开字符串的帮助吗?这就是我到目前为止所做的: <dbg><h><d t="2013/08/11 (Aug) (Sun) 00:56:23.491" m="CANLogging" f="../../../ApplCtrl/CANMessageLoger.cpp" l="120" fnc="void CANMessageLoger::WriteToLog(uint16_t, uint16_t, uint

给定一个XML文件,我正在编写Bash来解析它,但需要有关头文件和断开字符串的帮助吗?这就是我到目前为止所做的:

<dbg><h><d t="2013/08/11 (Aug) (Sun) 00:56:23.491" m="CANLogging" f="../../../ApplCtrl/CANMessageLoger.cpp" l="120" fnc="void CANMessageLoger::WriteToLog(uint16_t, uint16_t, uint16_t, uint16_t, uint8_t, uint8_t*)" lvl="DBG_EVENT" thrd=""/></h><b> d2    ff    f7   0c 10 27 ff ff ff ff ff </b></dbg>



但是我需要在输出文件中添加一个头:

Date     Time        source Format Specific data 

对于要分析和修改的日期字符串,有点:

13.08.11 00:56:23.491   d2  ff  f7  0c  10  27  ff  ff  ff  ff  ff
使用svante,我得到:

grep CANLogging $1 |  awk '{printf("%s %s",$2,$5); i=18; while(i<NF) { printf("  %s", $i); ++i} printf("\n");}'  | awk -F "\"" 'BEGIN{print "Date     Time        source Format Specific data"}{print $2 " " $3}' | sed 's/^\([0-9]\{2\}\)\([0-9]\{2\}\)\/\([0-9]\{2\}\)\//\2.\3./' > CAN
grep可以记录$1 | awk'{printf(“%s%s”,$2,$5);i=18;而(i这可能会起作用(第一行向新文件添加头,第二行解析日期)。如果需要更多解析,请查看sed

echo "Date     Time        source Format Specific data" > new.file
sed 's/2013\//13./g' old.file | sed 's/\//./g' >> new.file
也许这会起作用(第一行向新文件添加头,第二行解析日期)

echo "Date     Time        source Format Specific data" > new.file
sed 's/2013\//13./g' old.file | sed 's/\//./g' >> new.file

这应该行得通。将上一个awk修改为包含sed的标题和管道,以进行简单的日期格式更改:

... | awk -F "\"" 'BEGIN{print "Date     Time        source Format Specific data"}{print $2 " " $3}' | sed 's/^\([0-9]\{2\}\)\([0-9]\{2\}\)\/\([0-9]\{2\}\)\//\2.\3./' > CAN
awk
BEGIN规则在读取第一条输入记录之前执行一次


sed
命令匹配并替换每行的第一个日期数字和分隔符

这应该有效。更改上一个awk以将标题和管道包含到sed中,以进行简单的日期格式更改:

... | awk -F "\"" 'BEGIN{print "Date     Time        source Format Specific data"}{print $2 " " $3}' | sed 's/^\([0-9]\{2\}\)\([0-9]\{2\}\)\/\([0-9]\{2\}\)\//\2.\3./' > CAN
awk
BEGIN规则在读取第一条输入记录之前执行一次

sed
命令匹配并替换每行的第一个日期数字和分隔符