我是Linux的新手,并为一堂课安装了Fedora 20。我们使用默认的开箱即用配置安装了Tripwire,我想从安装中获取标准错误来修复配置文件。
收集错误:
tripwire -m i -c tw.cfg 2> errors
清理错误文件以进行处理:
cat errors.txt | grep "/" | cut -d " " -f 3 > fixederrors
这给了我一个很好的干净文件,每行有一个路径,即:
我想通过将fixederrors中的数据与配置文件进行比较并将匹配的字符串添加到'#'来自动执行此过程。
我尝试了sed,但它注释掉了整个配置文件!
sed 's/^/#/g' fixederrors > commentederrors
或者,我考虑比较配置文件和fixederrors并创建第三个文件。有没有办法获取两个文件,比较它们,并删除重复的数据?
感谢任何帮助。我试过bash和python,但是我不太了解并且在这个兔子洞里走了下来。同样,这是为了我的成长,而不是在生产环境中。
答案 0 :(得分:0)
我们假设您的输入文件名为fixederrors
" clean"
/bin/ash
/bin/ash.static
/root/.Xresources
此输入作为名为config.original
use /bin/ash
use /bin/bash
do stuff with /bin/ash.static and friends
/root/.Xresources
do other stuff...
将此脚本放在bash
#!/bin/bash
Input_Conf_File="config.original" # Original configuration file
Output_Conf_File="config.new" # New configuration file
Input_Error_File="fixederrors" # File of cleaned error
rm -f $Output_Conf_File # Let's we create a new file erasing old
while read -r line ; do # meanwhile there are line in config file
AddingChar="" # No Char to add #
while IFS= read -r line2 ; do # For each line of Error file,
# here you can add specific rules for your match e.g
# line2=${line2}" " # if it has always a space after...
[[ $line == *$line2* ]] && AddingChar="#" # If found --> Change prefix "#"
done < $Input_Error_File
echo "${AddingChar}${line}" >> $Output_Conf_File # Print in new file
done < $Input_Conf_File
cat $Output_Conf_File # You can avoid this it's only to check results
exit 0
您将拥有此输出
#use /bin/ash
use /bin/bash
#do stuff with /bin/ash.static and friends
#/root/.Xresources
do other stuff...
注意:
IFS=
删除了阅读/bin/ash
将捕获/bin/ash.EVERYTHING
行;因此,如果配置输入文件中存在一行,则 /bin/ash.dynamic 也会被注释。如果不事先了解配置文件,则无法设置特定规则,但您可以从此处开始。