我需要通过删除所有出现该行的行来替换文件中的字符串,并将所有行替换为第一次出现。我有这样的事情:
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次: 错误这是错误
并将其输出到新文件。
有什么想法吗?
新文件需要等于原始文件(相同内容),唯一替换的行是具有该发生的行。
答案 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
表示您在一行上尝试多次,应将其删除。