MST

星途 面试题库

面试题:Bash文本处理之文件筛选与内容提取

假设有一个目录包含大量文本文件,文件名包含日期信息(如file_20230101.txt),要求编写一个Bash脚本,筛选出文件名日期在2023年6月之后的文件,并提取这些文件中包含特定关键词(如'important')的行,将结果输出到一个新文件中。请描述实现思路并给出脚本代码。
15.3万 热度难度
编程语言Bash

知识考点

AI 面试

面试题答案

一键面试

实现思路

  1. 使用 find 命令结合正则表达式来匹配文件名中日期在2023年6月之后的文件。
  2. 对于筛选出的文件,使用 grep 命令查找包含特定关键词(如 important)的行。
  3. grep 查找到的结果输出到一个新文件中。

脚本代码

#!/bin/bash

# 输出结果的新文件
output_file="result.txt"

# 清空输出文件
> $output_file

# 查找文件名日期在2023年6月之后的文件,并提取包含'important'的行,输出到结果文件
find . -type f -name "file_2023[0-9][0-9].txt" -regex ".*/file_2023(0[7-9]|1[0-2])[0-9]{2}\.txt" -exec grep 'important' {} \; >> $output_file

上述脚本中:

  • find . -type f -name "file_2023[0-9][0-9].txt" 用于查找当前目录下文件名符合 file_2023XX.txt 格式的文件。
  • -regex ".*/file_2023(0[7-9]|1[0-2])[0-9]{2}\.txt" 这部分正则表达式用于进一步筛选出日期在2023年6月之后的文件。
  • -exec grep 'important' {} \; 对每个找到的文件执行 grep 命令查找关键词 important
  • >> $output_filegrep 的结果追加到 result.txt 文件中。开始时先清空了 result.txt 文件以确保每次运行脚本都是新的结果。