shell遍历一个文本内容在另一个文本中标识出来
时间: 2024-12-22 20:12:46 浏览: 1
Shell脚本读取标准ini配置文件Demo
在Shell中,如果想遍历一个文本(例如`source.txt`),并在另一个文本(例如`target.txt`)中找到匹配的内容,并在目标文本中添加标识(如`[MATCH]`),可以使用`grep`和`awk`结合起来完成。假设`source.txt`中有需要查找的关键字,我们可以这样做:
```bash
while read -r keyword; do
grep -l "$keyword" target.txt | xargs -I {} awk -i inplace '{if (NR == FNR) {next} else if ($0 ~ /{}/) {sub($0, "[MATCH] " $0)} 1}' target.txt
done < source.txt
```
这个脚本的工作流程是这样的:
- 使用`read`逐行读取`source.txt`的内容作为关键字 (`keyword`变量)。
- 使用`grep`查找`target.txt`中每个关键字的位置,结果传递给`xargs`,`xargs`再把这些位置传递给`awk`。
- `awk`条件判断:如果当前行是`FNR`(文件名正则表达式模式的数量),跳过;如果当前行包含关键字,则在其前面添加`[MATCH]`;最后,原样输出行(`1`)。
- `-i inplace`选项让`awk`在原文件上做修改,而不需要创建额外的临时文件。
请注意,这个脚本会在`target.txt`中覆盖原有的内容,所以在运行之前最好先备份目标文件。
阅读全文