Bash有条件地删除行尾
我试图从日志文件中的特定行中删除行尾。目标是从匹配的行中删除行尾,然后将这些行附加到与删除行尾条件不匹配的前一行 日志示例:Bash有条件地删除行尾,bash,awk,sed,Bash,Awk,Sed,我试图从日志文件中的特定行中删除行尾。目标是从匹配的行中删除行尾,然后将这些行附加到与删除行尾条件不匹配的前一行 日志示例: [username] [object] [ip address] [datetime] [pid] :>MESSAGE TYPE:Message [username] [object] [ip address] [datetime] [pid] :>MESSAGE TYPE:Message [username] [object] [ip address] [d
[username] [object] [ip address] [datetime] [pid] :>MESSAGE TYPE:Message
[username] [object] [ip address] [datetime] [pid] :>MESSAGE TYPE:Message
[username] [object] [ip address] [datetime] [pid] :>MESSAGE TYPE:Message
[username] [object] [ip address] [datetime] [pid] :>MESSAGE TYPE:Message
Log Message Overflowing
Log Message Overflowing
Log Message Overflowing
Log Message Overflowing
[username] [object] [ip address] [datetime] [pid] :>MESSAGE TYPE:Message
[username] [object] [ip address] [datetime] [pid] :>MESSAGE TYPE:Message
[username] [object] [ip address] [datetime] [pid] :>MESSAGE TYPE:Message
[username] [object] [ip address] [datetime] [pid] :>MESSAGE TYPE:Message
[username] [object] [ip address] [datetime] [pid] :>MESSAGE TYPE:Message
Log Message Overflowing
Log Message Overflowing
Log Message Overflowing
[username] [object] [ip address] [datetime] [pid] :>MESSAGE TYPE:Message
[username] [object] [ip address] [datetime] [pid] :>MESSAGE TYPE:Message
[username] [object] [ip address] [datetime] [pid] :>MESSAGE TYPE:Message
[username] [object] [ip address] [datetime] [pid] :>MESSAGE TYPE:Message
[username] [object] [ip address] [datetime] [pid] :>MESSAGE TYPE:Message
[username] [object] [ip address] [datetime] [pid] :>MESSAGE TYPE:Message Log Message Overflowing Log Message Overflowing Log Message Overflowing Log Message Overflowing
[username] [object] [ip address] [datetime] [pid] :>MESSAGE TYPE:Message
[username] [object] [ip address] [datetime] [pid] :>MESSAGE TYPE:Message
[username] [object] [ip address] [datetime] [pid] :>MESSAGE TYPE:Message
[username] [object] [ip address] [datetime] [pid] :>MESSAGE TYPE:Message
[username] [object] [ip address] [datetime] [pid] :>MESSAGE TYPE:Message Log Message Overflowing Log Message Overflowing Log Message Overflowing
[username] [object] [ip address] [datetime] [pid] :>MESSAGE TYPE:Message
[username] [object] [ip address] [datetime] [pid] :>MESSAGE TYPE:Message
示例输出:
[username] [object] [ip address] [datetime] [pid] :>MESSAGE TYPE:Message
[username] [object] [ip address] [datetime] [pid] :>MESSAGE TYPE:Message
[username] [object] [ip address] [datetime] [pid] :>MESSAGE TYPE:Message
[username] [object] [ip address] [datetime] [pid] :>MESSAGE TYPE:Message
Log Message Overflowing
Log Message Overflowing
Log Message Overflowing
Log Message Overflowing
[username] [object] [ip address] [datetime] [pid] :>MESSAGE TYPE:Message
[username] [object] [ip address] [datetime] [pid] :>MESSAGE TYPE:Message
[username] [object] [ip address] [datetime] [pid] :>MESSAGE TYPE:Message
[username] [object] [ip address] [datetime] [pid] :>MESSAGE TYPE:Message
[username] [object] [ip address] [datetime] [pid] :>MESSAGE TYPE:Message
Log Message Overflowing
Log Message Overflowing
Log Message Overflowing
[username] [object] [ip address] [datetime] [pid] :>MESSAGE TYPE:Message
[username] [object] [ip address] [datetime] [pid] :>MESSAGE TYPE:Message
[username] [object] [ip address] [datetime] [pid] :>MESSAGE TYPE:Message
[username] [object] [ip address] [datetime] [pid] :>MESSAGE TYPE:Message
[username] [object] [ip address] [datetime] [pid] :>MESSAGE TYPE:Message
[username] [object] [ip address] [datetime] [pid] :>MESSAGE TYPE:Message Log Message Overflowing Log Message Overflowing Log Message Overflowing Log Message Overflowing
[username] [object] [ip address] [datetime] [pid] :>MESSAGE TYPE:Message
[username] [object] [ip address] [datetime] [pid] :>MESSAGE TYPE:Message
[username] [object] [ip address] [datetime] [pid] :>MESSAGE TYPE:Message
[username] [object] [ip address] [datetime] [pid] :>MESSAGE TYPE:Message
[username] [object] [ip address] [datetime] [pid] :>MESSAGE TYPE:Message Log Message Overflowing Log Message Overflowing Log Message Overflowing
[username] [object] [ip address] [datetime] [pid] :>MESSAGE TYPE:Message
[username] [object] [ip address] [datetime] [pid] :>MESSAGE TYPE:Message
我不确定什么是最好的方法,我也有过一些困难,通过sed有条件地删除行结尾
可能在每条线路上循环是最好的方式
这就是我想出来的,它是有效的,我只是认为会有一个更好的不太复杂/不太线性的方法
#!/bin/bash
PrevNoMatchLine=""
PrevMatchLine=""
while read -r line; do
if [[ $line =~ ^[^\[] ]]; then
PrevMatchLine+="$line "
else
if [[ $PrevMatchLine ]]; then
PrevNoMatchLine+=" $PrevMatchLine"
PrevMatchLine=""
echo $PrevNoMatchLine
else
PrevNoMatchLine=$line
fi
echo $line
fi
done < test.log
#/bin/bash
PrevNoMatchLine=“”
PrevMatchLine=“”
而read-r行;做
如果[[$line=~^[^\[]];则
PrevMatchLine+=“$line”
其他的
如果[[$PrevMatchLine]];则
PrevNoMatchLine+=“$PrevMatchLine”
PrevMatchLine=“”
echo$PrevNoMatchLine
其他的
PrevNoMatchLine=$line
fi
回音$线
fi
完成
您可以使用awk:
awk '{if ($0 ~ /^\[/) {if (p) print p; p=$0} else p = p " " $0} END{print p}' file.log
[username] [object] [ip address] [datetime] [pid] :>MESSAGE TYPE:Message
[username] [object] [ip address] [datetime] [pid] :>MESSAGE TYPE:Message
[username] [object] [ip address] [datetime] [pid] :>MESSAGE TYPE:Message
[username] [object] [ip address] [datetime] [pid] :>MESSAGE TYPE:Message Log Message Overflowing Log Message Overflowing Log Message Overflowing Log Message Overflowing
[username] [object] [ip address] [datetime] [pid] :>MESSAGE TYPE:Message
[username] [object] [ip address] [datetime] [pid] :>MESSAGE TYPE:Message
[username] [object] [ip address] [datetime] [pid] :>MESSAGE TYPE:Message
[username] [object] [ip address] [datetime] [pid] :>MESSAGE TYPE:Message
[username] [object] [ip address] [datetime] [pid] :>MESSAGE TYPE:Message Log Message Overflowing Log Message Overflowing Log Message Overflowing
[username] [object] [ip address] [datetime] [pid] :>MESSAGE TYPE:Message
[username] [object] [ip address] [datetime] [pid] :>MESSAGE TYPE:Message