0

我希望能够从日志文件中解析日期和时间。目前它们采用以下格式:

“02/Jun/2009:14:38:50”但我想使用 linux 命令行中可用的东西将它们分隔在不同的列中,以便生成的输出如下所示:

“2009 年 6 月 2 日” “14:38:50”

有人可以说明如何做到这一点吗?

问候

4

5 回答 5

3

如果没有其他格式的行,克里斯的答案是最好的。如果您只需要影响具有该特定格式的行,请执行以下操作:

cat log | sed -e 's/"\([^:]*\):\([^"]*\)"/"\1" "\2"/'
于 2009-06-02T22:26:40.303 回答
1

如果这就是每一行的全部内容,也许:

cat file.txt | sed -e 's/:/" "/'
于 2009-06-02T22:24:48.013 回答
1

纯重击:

while read line ; do echo ${line/:/\" \"}; done < logfile
于 2009-06-04T14:52:05.990 回答
0

awk 的 sub() 函数返回 1,如果替换成功,则:

cat file.txt | awk 'sub(/:/,"\" \"")'

GNU awk 可以使用 gensub() 函数,所以这是下面的反向引用示例。

cat file.txt | gawk '$0=gensub(/("[^:]*):([^"]*")/,"\\1\" \"\\2",1)'
于 2009-06-04T14:29:19.453 回答
0

用于查找正则表达式“&:&:&:&”并在第一个冒号之前和之后分隔的比特脚本。(& 表示任意数量的任意字符)。

var str log
cat "logfile" > $log
while ( { sen -r "^&:&:&:&^" $log } > 0 )
do
    var str datetime, date, time
    stex -r "^&:&:&:&^" $log > $datetime
    stex -p "]^:^" $datetime > $date    # String before the first : is date.
    stex -p "^:^[" $datetime > $time    # String after the first : is time.
    echo $date "\t" $time
done

要尝试,您可以下载 biterscripting。谷歌一下,或者安装说明在http://www.biterscripting.com

于 2009-06-15T17:10:41.333 回答