从日志文件中删除换行符

从日志文件中删除换行符

我正在尝试从日志文件中提取一些信息,并且需要从中删除换行符,以便于处理,下面是所需结果的示例:

输入文件 :

02/01/2018 08:18:14      ANR0407I Session 63121 started for administrator 
                         ADMIN_CENTER (DSMAPI) (Tcp/Ip SAP-DOC(52499)).SESSION: 
                         63121)

输出应该是:

02/01/2018 08:18:14      ANR0407I Session 63121 started for administrator ADMIN_CENTER (DSMAPI) (Tcp/Ip SAP-DOC(52499(SESSION: 63121)

答案1

sed如果每行以一系列空白(空格或水平制表符)字符开头,则可以使用将新行连接到前一行:

sed -e :a -e '$!N;s/\n[[:blank:]]\{1,\}/ /;ta' -e 'P;D' file.log

这是示例的一个小变化40. 如果一行以等号“=”开头,则将其附加到上一行Sed 单行命令详解,第一部分:文件间距、编号和文本转换与替换


如果“块”由一个或多个空白行分隔(您没有显示足够的日志来知道是否是这种情况),那么更简单的替代方法是awk使用段落模式

awk -vRS= '{$1=$1} 1' file.log

它读取整个段落,然后使用默认(单空格)输出分隔符重新格式化它们。

相关内容