我需要在多个用户目录和子目录下的多个文件中找到一个正则表达式字符串。我使用了grep命令来查找实际数据,但是已经在每个用户目录中手动运行了它,并递归grep了字符串。我想从根目录开始,并有一个小脚本为每个用户目录创建一个文件,并将该用户的grep输出记录在文本文件中。我还没有运气用for循环自行解决。
对于循环:我真的不知道如何或在哪里放置grep命令。
#!/bin/bash
IFS=$'\n'
for dir in $(find /Users/brian/Documents/ -maxdepth 1 -path . -type d);
do
for subdir in $(find "$dir" -mindepth 2 -type d);
do
base_dir=$(basename $dir)
base_subdir=$(basename $subdir)
touch "$base_dir"/"$base_subdir"/"$base_dir"_"$base_subdir".txt
done
done
grep -irnE '<img [^>]*src=\"?http:' /path/to/user/ -s > /path/to/output.txt &
我对grep的预期结果很好,但是我真的不知道如何将grep集成到for循环中。
答案 0 :(得分:0)
您可以尝试以下递归脚本。 它仅对每个目录进行一次检查,但是随后会收集子目录的grep结果,以将其传播到当前目录中。 确保脚本名称与第14行中的调用匹配,并且可以在path变量中找到该脚本。
#!/bin/bash
results_file=my_grep_results.txt
files_to_search="*.srt"
pattern='[Tt]ime'
OIFS="%IFS"
IFS=$'\n'
echo "scanning $(pwd) - ${1}..."
cd "$1"
for subdir_to_search in $(find -maxdepth 1 -type d) ; do
if [ "${subdir_to_search}" != "." ] ; then
grep_recursive.sh "${subdir_to_search}"
cat "${subdir_to_search}/${results_file}" >> "${results_file}"
fi
done
grep "${pattern}" ${files_to_search} >> "${results_file}" 2> /dev/null
IFS="$OIFS"