我有以下脚本,该脚本在目录中的每个文件上运行命令以匹配特定的模式。然后将匹配的输出打印到.csv。我具有所需的格式,但是我匹配的每个模式都被打印两次。像这样:
Match1
Match2
Match1
Match2
使用uniq并排序到此脚本中无法解决问题,因此我怀疑我的语法已关闭。到目前为止,我还无法通过Google或其他答案找到解决方案。感谢您的任何帮助,谢谢!
#!/usr/bin/env bash
FILES=/Users/User1/Desktop/Folder/"*"
for f in $FILES
do
echo "Processing $f file..."
# take action on each file. $f store current file name
sed -n /"New Filters"/,/"Modified Filters"/p "$f" | grep -v -e 'Bugtraq ID:'
-e 'Common Vulnerabilities and Exposures:' -e 'Android' | grep -E '(^|[^0-9])
[0-9]{5}($|[^0-9])'| sed 's/:/,/1' >> NewFile.csv
echo "Complete. Check NewFile.csv"
done;
示例输入:预期结果是提取粗体文本
过滤器
新过滤器
修改的过滤器(逻辑更改)
修改后的
过滤器(仅元数据更改)
删除的过滤器过滤器
新过滤器:
29722:HTTP:蜻蜓后门。GoodorGo植入CnC信标1修改的过滤器(逻辑更改):
我不想要的文字修改的过滤器(仅元数据更改):
我不想要的文字
答案 0 :(得分:2)
没有示例输入/输出,我们无法分辨出您的问题所在,所以这不是答案,但这是如何真正使用该脚本执行操作的方法:
awk '
FNR==1 { printf "Processing %s file...\n", FILENAME | "cat>&2" }
/"New Filters"/ { inBlock=1 }
inBlock {
if ( !/Bugtraq ID:|Common Vulnerabilities and Exposures:|Android/ &&
/(^|[^0-9])[0-9]{5}($|[^0-9])/ ) {
sub(/:/,",")
print
}
}
/"Modified Filters"/ { inBlock=0 }
' /Users/User1/Desktop/Folder/"*" > "NewFile.csv"
echo "Complete. Check NewFile.csv"
请注意,不需要shell循环。参见why-is-using-a-shell-loop-to-process-text-considered-bad-practice。
每当您发现使用多个命令(特别是多个sed和/或greps)和管道来操纵文本时,请考虑仅使用awk。
答案 1 :(得分:1)
您是否两次运行脚本?它会附加>> NewFile.csv
而不在开始时截断文件,因此,如果运行两次,则CSV文件最终将重复输出。您可以在开头添加> NewFile.csv
,以清空输出文件。
或者,也许您有重复的输入文件。
答案 2 :(得分:0)
如果需要:
:
替换为,
然后您可以尝试
perl -lne 'BEGIN{$/=undef} push @r,$& while /(?<=New Filters).*?(?=Modified Filters)/gs; @r2=grep(!/Bugtraq ID:|Common Vulnerabilities and Exposures:|Android/g,@r); /\d{5}[^\n]+\d/g && ($_=$&) && s/:/,/ && print for @r2' file
此示例输入文件
dified Filters (logic changes)
Modified
Filters (metadata changes only)
Removed Filters
Filters
New Filters:
29722: HTTP: Dragonfly Backdoor.Goodor Go Implant CnC Beacon 1
Modified Filters (logic changes):
Text I don't want
Modified Filters (metadata changes only):
Text I don't want
New Filters:
Bugtraq ID:
Modified Filters (logic changes):
New Filters:
Common Vulnerabilities and Exposures:
Modified Filters (logic changes):
New Filters:
Android
Modified Filters (logic changes):
New Filters:
29723: HTTP: Dragonfly Backdoor.Goodor Go Implant CnC Beacon 1
Modified Filters (logic changes):
New Filters:
29724: HTTP: Dragonfly Backdoor.Goodor Go Implant CnC Beacon 1
Modified Filters (logic changes):
输出将是:
29722, HTTP: Dragonfly Backdoor.Goodor Go Implant CnC Beacon 1
29723, HTTP: Dragonfly Backdoor.Goodor Go Implant CnC Beacon 1
29724, HTTP: Dragonfly Backdoor.Goodor Go Implant CnC Beacon 1