1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556 |
- #!/bin/bash
- # $1:文件夹名称
- # $2:匹配字符串
- # $3:可选参数,文件名不包含此参数
- dir="/logs/$1"
- count=0
- if [ ! -d "$dir" ]; then
- echo "目录 $dir 不存在"
- exit 1
- fi
- while [ $count -lt 20 ]
- do
- if [ -z "$3" ]; then
- file=$(ls -rt "$dir" | grep "error" | tail -n $((20 - count)) | head -n 1)
- else
- file=$(ls -rt "$dir" | grep -v "$3" | tail -n $((20 - count)) | head -n 1 )
- fi
-
- if [ -z "$file" ]; then
- echo "目录 $dir 中没有符合要求的文件"
- exit 1
- fi
-
- matching_line=$( LC_ALL=C fgrep -n "$2" "$dir/$file" | tail -n 1)
- if [ -z "$matching_line" ]; then
- echo "文件 $file 中没有找到字符串 '$2'"
- count=$((count+1))
- else
- line_number=$(echo "$matching_line" | cut -d ":" -f 1)
- echo "在文件 $file 中找到了字符串 '$2',位于第 $line_number 行:"
- if [ $((line_number - 100)) -lt 0 ]; then
- sed -n "1,$((line_number + 100))p" "$dir/$file" | awk '{printf("%s %s\n", NR, $0)}'
- echo "-----------------"
- command="sed -n \"1,$(( $line_number + 100 ))p\" \"$dir/$file\" | awk '{printf(\"%s %s\\n\", NR, \$0)}'"
- echo "$command"
- else
- sed -n "$((line_number - 100)),$((line_number + 100))p" "$dir/$file" | awk '{printf("%s %s\n", NR+'$(($line_number - 101))', $0)}'
- echo "-----------------"
- command="sed -n \"$(( $line_number - 100)),$(( $line_number + 100))p\" \"$dir/$file\" | awk '{printf(\"%s %s\\n\", NR+'$(($line_number - 101))', \$0)}'"
- echo "$command"
- fi
- echo "在文件 $file 中找到了字符串 '$2',位于第 $line_number 行:"
- break
- fi
- done
- if [ $count -eq 5 ]; then
- echo "在目录 $dir 中的多个文件中都没有找到字符串 '$2'"
- exit 1
- fi
|