簡體   English   中英

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

[英]Clean a log file using sed Linux command

我需要通過刪除所有出現該行的行來替換文件中的字符串,並用第一次出現的行替換所有行。 我有這樣的事情:

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重復以下錯誤:ERROR這是錯誤

並將其輸出到新文件。

有任何想法嗎?

編輯

新文件必須與原始文件相同(內容相同),唯一被替換的行就是該行。

我發現這行是錯誤的:

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意味着您在一行上嘗試了多次,應該將其刪除。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM