【发布时间】:2014-05-30 01:29:48
【问题描述】:
我有一个 server.log 文件,其中包含这样编写的堆栈跟踪:
timestamp texttexttexttext \n
at texttexttexttext\n
at texttexttexttext\n
at texttexttexttext\n
caused by texttexttexttext\n
at texttexttexttext\n
at texttexttexttext\n
at texttexttexttext\n
at texttexttexttext\n
以及像这样写的警告/信息,所有信息都在一行中:
timestamp texttexttexttexttext \n
我想解析日志文件,以便唯一的换行符是时间戳之前的换行符;这样堆栈跟踪都是一行,我可以稍后循环遍历它,只需要回显一次即可显示整个堆栈跟踪。基本上我希望大的堆栈跟踪看起来像这样:
timestamp texttexttexttext
at texttexttexttext
at texttexttexttext
at texttexttexttext
caused by texttexttexttext
at texttexttexttext
at texttexttexttext
at texttexttexttext
at texttexttexttext\n
我尝试遍历这些行,如果它以时间戳开头,我在它之前添加一个换行符,如果它不以时间戳开头,我使用 sed 将换行符替换为空格。下面是循环:cmets 显示我试图将它全部放在一个字符串中以便稍后循环,但我也尝试将它全部放在一个文件中以便稍后通过。
for x in "$(cat tempFile.txt)"
do
if [[ ! $x =~ [0-2][0-9](:+).* ]]
then
#STRINGBUILDER+=`printf "%s" $x | sed 's/"$NL"/" "/'`
printf "%s" $x | sed 's/$'\n'/" "/' > parsed.txt
else
#STRINGBUILDER+=`printf "\n%s" $x`
printf "\n%s" $x > parsed.txt
fi
done
但是,无论我以后如何遍历文件,换行符似乎仍然存在。我该如何摆脱它们?
【问题讨论】:
-
我认为您的消息与您帖子中出现的
\ns 混淆了。我希望您的文件中没有明确包含这些字符。 -
@RSahu 你说得对,它们并没有明确地在文件中,我只是用它们来帮助可视化换行符的确切位置。
-
你能发布你想从输入中得到的输出吗?
-
是的;我编辑了帖子。
-
时间戳是什么格式的?