使用sed Linux命令清理日志文件

时间:2015-04-23 19:38:22

标签: regex linux sed

我需要通过删除所有出现该行的行来替换文件中的字符串,并将所有行替换为第一次出现。我有这样的事情:

errorMain="ERROR this is the error"
var1=$( grep "$errorMain" log_verification.log )
errorCount1=$(grep -c "$errorMain" log_verification.log)

countErrors() {
if [ $errorCount1 -gt 10 ] ; 
then
replaceFirstOccurrence
fi
}

replaceFirstOccurrence() {
firstOccurrence=$(grep -m 1 "$errorMain" log_verification.log)
echo "the error $firstOccurrence is repeated $errorCount1 times"
sed -i 's/$errorMain/$firstOccurrence/g' log_verification.log > log_without_redundant.log
}

countErrors

我需要用以下内容替换所有出现的内容:

以下错误重复X次: 错误这是错误

并将其输出到新文件。

有什么想法吗?

修改

新文件需要等于原始文件(相同内容),唯一替换的行是具有该发生的行。

1 个答案:

答案 0 :(得分:0)

我觉得这行不对:

sed -i 's/$errorMain/$firstOccurrence/g' log_verification.log > log_without_redundant.log

正确的方法应该是:

sed -i "s/.*$errorMain.*/$firstOccurrence/" log_verification.log > log_without_redundant.log

sh脚本上的单引号用于文字,而不是变量替换。双引号将扩展您的变量。而且为了完全替换,您需要在前后添加.*,以匹配该行上的任何其他字符。此外,/g表示您在一行上尝试多次,应将其删除。