写一个shell脚本,依次检查当前目录及所有子目录下面的vsif文件,找到所有以test开头的语句,如果没有就不再检查当前文件。将所有包含test开头的语句及其所包含的内容增加输出到test_b.vsif中。其中test_b.vsif中的b改为当前目录及所有子目录下面的vsif文件名的_c.vsif的c。注意每次输出test.vsif不是覆盖而是增加,test.vsif保存在当前目录。
时间: 2024-02-25 17:56:55 浏览: 79
一篇教会你写90%的shell脚本.docx
好的,以下是这个脚本的代码:
```bash
#!/bin/bash
# 获取所有vsif文件的路径
vsif_files=$(find . -name "*.vsif")
# 遍历每个vsif文件
for file in $vsif_files; do
# 如果没有包含test开头的语句就跳过
if ! grep -q "^test" "$file"; then
continue
fi
# 获取当前目录及所有子目录下的vsif文件名
vsif_names=$(find . -name "*.vsif" | awk -F/ '{print $NF}' | sed 's/\.vsif//g' | sed "s/^/${file%/*}\//")
# 遍历每个包含test开头的语句
grep "^test" "$file" | while read line; do
# 将语句及其所包含的内容写入test_b.vsif中
echo "$line" >> test_b.vsif
sed -n "/$line/,/^$/p" "$file" >> test_b.vsif
done
# 根据当前vsif文件名修改test_b.vsif中的c
sed -i "s/_c.vsif/_${file##*/}/g" test_b.vsif
# 将test_b.vsif中的内容追加到test.vsif中
cat test_b.vsif >> test.vsif
# 清空test_b.vsif的内容
> test_b.vsif
done
```
这个脚本会在当前目录及所有子目录下查找所有的vsif文件,并遍历每个vsif文件,如果发现有以test开头的语句则将语句及其所包含的内容写入test_b.vsif中,并在其中的c处替换为当前vsif文件的名称。最后将test_b.vsif中的内容追加到test.vsif中,并清空test_b.vsif的内容,以备下次使用。
阅读全文