背景
shell脚本遍历指定文件夹下的所有文本文件,并将包括指定关键字所在行的前后指定行显示在新文本文件中,主要用于文本中指定内容监控。
#!/bin/bash
# 定义变量
search_dir="your_directory_path" # 替换为你要遍历的文件夹路径
keywords=("keyword1" "keyword2" "keyword3") # 替换为你要搜索的多个关键字
output_file="output.txt" # 输出文件
# 清空输出文件
> "$output_file"
# 遍历文件夹中的所有文件
for file in "$search_dir"/*; do
if [ -f "$file" ]; then
for keyword in "${keywords[@]}"; do
# 使用grep找到关键字所在的行号
grep -n "$keyword" "$file" | while IFS=: read -r line_number line_content; do
# 计算前后5行的行号范围
start=$((line_number - 5))
end=$((line_number + 5))
# 如果开始行小于1,设置为1
if [ "$start" -lt 1 ]; then
start=1
fi
# 打印文件名和行号范围
echo "File: $file (Lines $start to $end, Keyword: $keyword)" >> "$output_file"
# 提取行号范围的内容并追加到输出文件
sed -n "$start,${end}p" "$file" >> "$output_file"
echo "------------------------------" >> "$output_file"
done
done
fi
done
echo "搜索完成,结果已保存到 $output_file"