[英]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.