wangzhiyong il y a 9 mois
Parent
commit
a94e2903fc
1 fichiers modifiés avec 56 ajouts et 0 suppressions
  1. 56 0
      logr.sh

+ 56 - 0
logr.sh

@@ -0,0 +1,56 @@
+#!/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" | head -n $((count + 1)) | tail -n 1)
+  else
+    file=$(ls -rt "$dir" | grep -v "$3" | head -n $((count + 1)) | tail -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