• centos7.9脚本,怎么排除特定的访问记录


    关注 码龄 粉丝数 原力等级 -- 被采纳 被点赞 采纳率 kc32668287 2024-05-28 15:06 采纳率: 29.3% 浏览 7 首页/ 运维 / 已结题 centos7.9脚本,怎么排除特定的访问记录 ¥15 服务器运维运维开发 在cnetos7.9上搞了一个脚本,遇到点问题, cat 21check_junrong_if_the_list_is_blocked.txt2024/05/28封锁| 116.148.8.53 | 中国浙江丽水 www.junrong.com/uploads/newfile.asp #要排除的,但长度不确定2024/05/28封锁| 116.148.28.0 | 中国浙江丽水 www.junrong.com/uploads/adminxm.asp #要排除的,但长度不确定2024/05/28封锁| 116.148.8.53 | 中国浙江丽水 www.junrong.com/uploads/newfile.php #要排除的,但长度不确定2024/05/28封锁| 116.148.28.0 | 中国浙江丽水 www.junrong.com/uploads/adminxm.php #要排除的,但长度不确定2024/05/28封锁| 116.148.8.53 | 中国浙江丽水 www.junrong.com/uploads/newfile.txt #要排除的,但长度不确定2024/05/28封锁| 116.148.28.0 | 中国浙江丽水 www.junrong.com/uploads/adminxm.txt #要排除的,但长度不确定 2024/05/28封锁| 116.148.8.53 | 中国浙江丽水 www.junrong.com/uploads/newfile.do #不排除的,但不一定是.do结尾的2024/05/28封锁| 116.148.28.0 | 中国浙江丽水 www.junrong.com/uploads/adminxm.do #不排除的,但不一定是.do结尾的 2024/05/28封锁| 116.148.28.28 | 中国浙江丽水 www.junrong.com/templets/newfile.php2024/05/28封锁| 116.148.8.61 | 中国浙江丽水 www.junrong.com/templets/admins.php2024/05/28封锁| 116.148.24.36 | 中国浙江丽水 www.junrong.com/templets/admins.php2024/05/28封锁| 116.148.12.56 | 中国浙江丽水 www.junrong.com/11.php2024/05/28封锁| 116.148.8.25 | 中国浙江丽水 www.junrong.com/config/3.php2024/05/28封锁| 116.148.24.51 | 中国浙江丽水 www.junrong.com/11.php2024/05/28封锁| 116.148.8.50 | 中国浙江丽水 www.junrong.com/uploads/admins.php2024/05/28封锁| 116.148.8.36 | 中国浙江丽水 www.junrong.com/config/admins.php cat ./tmp/pls_21_tebiezhuyi_`date +%Y%m%d`.txtupload while read linedor=`grep "$line" 21check_junrong_if_the_list_is_blocked.txt|wc -l`if [ "$r" == "0" ]then echo "$line was not found num=0" echo "000不存在特别注意列表">>./tmp/pls_21_tebie_bucunzai_ip_`date +%Y%m%d` echo "$line" >>./tmp/pls_21_tebie_bucunzai_ip_`date +%Y%m%d`else echo "$line is found num>=1" aa=`grep "$line" 21check_junrong_if_the_list_is_blocked.txt` echo "000以下特别注意的列表" >>./tmp/pls_21_tebie_cunzai_url_`date +%Y%m%d` echo "$aa" >>./tmp/pls_21_tebie_cunzai_url_`date +%Y%m%d` ##在待检查的列表中“21check_junrong_if_the_list_is_blocked.txt” 删除含有特别注意内容的行 sed -i "/$line/d" 21check_junrong_if_the_list_is_blocked.txtfidone <./tmp/pls_21_tebiezhuyi_`date +%Y%m%d`.txt 统计21check_junrong_if_the_list_is_blocked.txt 中的访问URL是否含有upload关键字的(文件是.asp和.php以及.txt的不统计),如果含有upload关键字的放到./tmp/pls_21_tebie_cunzai_url_`date +%Y%m%d`想打r=`grep "$line" 21check_junrong_if_the_list_is_blocked.txt|wc -l`这一句的主意,r=`grep "$line" 21check_junrong_if_the_list_is_blocked.txt|wc -l` 这一句怎么排除.asp和.php以及.txt的访问记录?谢谢各位! 展开全部 收起 写回答 好问题 0 提建议 追加酬金 关注问题 微信扫一扫 点击复制链接 分享 邀请回答 编辑 收藏 删除 收藏 举报 追加酬金 (90%的用户在追加酬金后获得了解决方案) 当前问题酬金 ¥ 15 (您已提供 ¥ 20, 还可追加 ¥ 485) ¥ 15¥ 20¥ 50¥ 100¥ 200 支付方式 扫码支付 二维码出错 点击刷新 支付金额 15 元 提供问题酬金的用户不参与问题酬金结算和分配 支付即为同意 《付费问题酬金结算规则》 结题 再想想 删除 再等等

    26条回答 默认 最新

    • 专家-赤兔[在线] 全栈领域优质创作者 2024-05-28 15:06
      关注
      获得0.30元问题酬金

      引自免费微信小程序:皆我百晓生

      为了实现您的需求,您可以使用awk命令来过滤掉包含asp、php和txt后缀的行。以下是修改后的脚本:

      1. #!/bin/bash
      2. # 定义要排除的扩展名
      3. exclude_extensions="asp php txt"
      4. # 遍历特别注意的列表
      5. while IFS= read -r line; do
      6. # 使用awk过滤出不包含指定扩展名的行
      7. filtered_line=$(awk -F '|' "!($NF ~ /(${exclude_extensions})$/) {print}" 21check_junrong_if_the_list_is_blocked.txt)
      8. r=$(echo "$filtered_line" | grep -c "$line")
      9. if [ "$r" -eq 0 ]; then
      10. echo "$line was not found num=0"
      11. echo "000不存在特别注意列表" >>./tmp/pls_21_tebie_bucunzai_ip_$(date +%Y%m%d)
      12. echo "$line" >>./tmp/pls_21_tebie_bucunzai_ip_$(date +%Y%m%d)
      13. else
      14. echo "$line is found num>=1"
      15. echo "000以下特别注意的列表" >>./tmp/pls_21_tebie_cunzai_url_$(date +%Y%m%d)
      16. echo "$filtered_line" >>./tmp/pls_21_tebie_cunzai_url_$(date +%Y%m%d)
      17. # 在待检查的列表中删除含有特别注意内容的行(这里可能不会执行,因为已经过滤了)
      18. # sed -i "/$line/d" 21check_junrong_if_the_list_is_blocked.txt
      19. fi
      20. done <./tmp/pls_21_tebiezhuyi_$(date +%Y%m%d).txt
      21. # 统计21check_junrong_if_the_list_is_blocked.txt中含upload的关键字的行数(不包括.asp、.php和.txt)
      22. grep -E 'upload(?!\.asp$)(?!\.php$)(?!\.txt$)' 21check_junrong_if_the_list_is_blocked.txt > ./tmp/pls_21_tebie_cunzai_upload_urls_$(date +%Y%m%d)

      这个脚本做了以下几件事:

      1. 定义一个变量exclude_extensions,包含了要排除的扩展名。
      2. 使用awk命令根据定义的扩展名过滤输入文件中的行。
      3. 修改grep命令以排除ASP、PHP和TXT类型的URL。

      这样就可以满足您的要求,同时排除特定类型的URL。运行此脚本时,确保它具有执行权限,并且所有的输入文件都在正确的位置。

      展开全部

      评论 编辑记录
      专家-赤兔[在线] 回复 kc32668287 2024-05-28 15:07

      为了解决您的问题,我们需要修改您用来计算匹配行数的命令,以便排除那些以 .asp.php.txt 结尾的 URL。您可以使用 grep 的反向匹配功能来实现这一点。具体来说,可以利用正则表达式中的否定后缀匹配来排除这些特定的文件扩展名。

      下面是修改后的命令示例:

      r=$(grep -Pv "(\.asp|\.php|\.txt)$" 21check_junrong_if_the_list_is_blocked.txt | grep -c "$line")
      

      这里做了两件事:

      1. -P 参数启用了 Perl 兼容的正则表达式,这让我们可以使用更高级的正则特性。
      2. -v 参数用于反向匹配,即排除符合特定模式的行。这里的模式是 (\.asp|\.php|\.txt)$,表示以 .asp.php.txt 结尾的字符串,其中 $ 表示行尾。
      3. grep -c "$line" 继续计算剩余行中匹配 $line 的数量。

      将此修改应用到您的脚本中,替换原有计数行的命令,最终得到的部分脚本如下:

      while read line
      do
          r=$(grep -Pv "(\.asp|\.php|\.txt)$" 21check_junrong_if_the_list_is_blocked.txt | grep -c "$line")
          if [ "$r" == "0" ]
          then
              echo "$line was not found num=0"
              echo "000不存在特别注意列表">>./tmp/pls_21_tebie_bucunzai_ip_`date +%Y%m%d`
              echo "$line"                >>./tmp/pls_21_tebie_bucunzai_ip_`date +%Y%m%d`
          else
              echo "$line is found num>=1"
              aa=$(grep "$line" 21check_junrong_if_the_list_is_blocked.txt)
              echo "000以下特别注意的列表"    >>./tmp/pls_21_tebie_cunzai_url_`date +%Y%m%d`
              echo "$aa"                      >>./tmp/pls_21_tebie_cunzai_url_`date +%Y%m%d`
              sed -i "/$line/d" 21check_junrong_if_the_list_is_blocked.txt
          fi
      done <./tmp/pls_21_tebiezhuyi_`date +%Y%m%d`.txt
      

      这样,计算时就会自动排除掉那些以 .asp.php.txt 结尾的 URL 记录了。

      回复
    • 阿里嘎多学长 2024-05-28 15:06
      关注
      获得0.15元问题酬金

      以下内容由CHATGPT及阿里嘎多学长共同生成、有用望采纳:


      要解决你的问题,我们需要对脚本进行一些调整。首先,我们需要修改grep命令的用法,以排除包含特定后缀(如.asp.php.txt)的访问记录。然后,我们需要确保脚本能够正确地将包含"upload"关键字的访问记录写入到指定的文件中。

      修改脚本

      1. 修改grep命令:我们需要使用grep-v选项来排除包含特定后缀的URL。这样,grep会输出不包含这些后缀的行。

      2. 确保脚本正确写入文件:我们需要在写入文件之前,检查文件是否已经存在。如果文件不存在,我们需要先创建文件。

      脚本示例

      1. #!/bin/bash
      2. # 读取要检查的IP列表
      3. cat 21check_junrong_if_the_list_is_blocked.txt
      4. # 临时文件名
      5. tmp_file="pls_21_tebie_cunzai_url_`date +%Y%m%d`.txt"
      6. # 检查文件是否存在,如果不存在则创建
      7. if [ ! -f "$tmp_file" ]; then
      8. touch "$tmp_file"
      9. fi
      10. # 读取临时文件内容
      11. while read line
      12. do
      13. # 使用grep排除.asp、.php、.txt后缀的URL
      14. r=$(comm -23 <(grep -v ".asp" <(grep "$line" 21check_junrong_if_the_list_is_blocked.txt)) <(grep -v ".php" <(grep "$line" 21check_junrong_if_the_list_is_blocked.txt)) <(grep -v ".txt" <(grep "$line" 21check_junrong_if_the_list_is_blocked.txt)))
      15. # 检查是否找到包含"upload"关键字的URL
      16. if [ "$r" == "0" ]; then
      17. echo "$line was not found num=0"
      18. echo "000不存在特别注意列表" >> "$tmp_file"
      19. echo "$line" >> "$tmp_file"
      20. else
      21. echo "$line is found num>=1"
      22. echo "$aa" >> "$tmp_file"
      23. fi
      24. done <"$tmp_file"
      25. # 将结果写入到最终文件
      26. cat "$tmp_file" > "pls_21_tebie_cunzai_url_`date +%Y%m%d`.txt"

      说明

      • comm -23:这个命令用于比较两个文件,这里用于比较grep命令的输出和原始文件。
      • grep -v ".asp":这个命令用于排除包含.asp后缀的URL。
      • grep -v ".php":这个命令用于排除包含.php后缀的URL。
      • grep -v ".txt":这个命令用于排除包含.txt后缀的URL。
      • cat "$tmp_file" > "pls_21_tebie_cunzai_url_date +%Ym%d`.txt":这个命令将临时文件的内容写入到最终文件中。

      注意

      • 这个脚本假设你的21check_junrong_if_the_list_is_blocked.txt文件是按照日期排序的,并且每个IP地址后面跟着的是以|分隔的URL。
      • 请根据你的实际文件结构和需求调整脚本。

      希望这个脚本能帮助你解决问题。如果有任何疑问或需要进一步的帮助,请随时告诉我!

      展开全部

      评论 编辑记录
    • 专家-郭老师 Java领域新星创作者 2024-05-28 15:06
      关注
      获得0.30元问题酬金

      🕒下午好,题主!目前:🟢[在线]
      📢参考通义千问、由郭老师整理提供!
      📣今日诗号:春风又绿江南岸,明月何时照我还。

      以下是改进后的脚本,能够排除包含".asp"、".php"和".txt"的访问记录,并将符合条件的记录写入到指定文件中:

      1. #!/bin/bash
      2. # 定义日期变量
      3. today=$(date +%Y%m%d)
      4. # 循环读取需要检查的文件
      5. while read line; do
      6. # 检查是否包含uploads,但不包含.asp、.php和.txt
      7. if echo "$line" | grep -q "uploads" && ! echo "$line" | egrep -q "\.(asp|php|txt)$"; then
      8. # 在"21check_junrong_if_the_list_is_blocked.txt"中查找匹配行
      9. r=$(grep "$line" 21check_junrong_if_the_list_is_blocked.txt | wc -l)
      10. if [ "$r" -eq "0" ]; then
      11. echo "$line was not found num=0"
      12. echo "000不存在特别注意列表" >> ./tmp/pls_21_tebie_bucunzai_ip_"$today"
      13. echo "$line" >> ./tmp/pls_21_tebie_bucunzai_ip_"$today"
      14. else
      15. echo "$line is found num>=1"
      16. aa=$(grep "$line" 21check_junrong_if_the_list_is_blocked.txt)
      17. echo "000以下特别注意的列表" >> ./tmp/pls_21_tebie_cunzai_url_"$today"
      18. echo "$aa" >> ./tmp/pls_21_tebie_cunzai_url_"$today"
      19. # 在"21check_junrong_if_the_list_is_blocked.txt"中删除匹配行
      20. sed -i "/$line/d" 21check_junrong_if_the_list_is_blocked.txt
      21. fi
      22. fi
      23. done < ./tmp/pls_21_tebiezhuyi_"$today".txt

      代码解释:

      1. #!/bin/bash: 指定脚本解释器为 bash。
      2. today=$(date +%Y%m%d): 定义日期变量,方便后续使用。
      3. while read line; do ... done < ./tmp/pls_21_tebiezhuyi_"$today".txt: 循环读取./tmp/pls_21_tebiezhuyi_"$today".txt文件中的每一行。
      4. if echo "$line" | grep -q "uploads" && ! echo "$line" | egrep -q "\.(asp|php|txt)$"; then ... fi:
        • 使用 grep -q "uploads" 判断当前行是否包含 "uploads"。
        • 使用 ! echo "$line" | egrep -q "\.(asp|php|txt)$" 判断当前行是否包含 ".asp"、".php" 或 ".txt" 结尾。
        • 只有同时满足以上两个条件,才会执行 if 语句块内的代码。
      5. r=$(grep "$line" 21check_junrong_if_the_list_is_blocked.txt | wc -l): 在"21check_junrong_if_the_list_is_blocked.txt"中查找匹配行,并将匹配的行数存储在变量r中。
      6. if [ "$r" -eq "0" ]; then ... else ... fi: 判断匹配的行数,如果为0则执行 then 语句块内的代码,否则执行 else 语句块内的代码。
      7. sed -i "/$line/d" 21check_junrong_if_the_list_is_blocked.txt: 在"21check_junrong_if_the_list_is_blocked.txt"中删除匹配行。

      使用说明:

      1. 将以上代码保存为 shell 脚本文件,例如 filter_access_log.sh
      2. 使用 chmod +x filter_access_log.sh 命令赋予脚本可执行权限。
      3. 运行脚本:./filter_access_log.sh

      这个脚本会读取 ./tmp/pls_21_tebiezhuyi_"$today".txt 文件,并将符合条件的记录分别写入到 ./tmp/pls_21_tebie_bucunzai_ip_"$today"./tmp/pls_21_tebie_cunzai_url_"$today" 文件中。同时,脚本还会在 21check_junrong_if_the_list_is_blocked.txt 文件中删除已经处理过的记录。

      展开全部

      评论
      专家-郭老师 2024-05-28 15:06

      题主您先参考下,如有问题,留言即可。如果解决问题,麻烦点击下采纳,谢谢!

      回复
    • 专家-皆知 2024-05-28 15:07
      关注
      获得0.15元问题酬金

      参考免费微信小程序:皆我百晓生 作答,经由专家-皆知整理回复,如问题解决,望采纳;如仍有疑问,请评论回复。

      为了解决您的问题,我们可以调整grep命令,利用正则表达式来排除那些以.asp.php.txt结尾的URL。您可以通过以下方式修改对应的代码段:

      r=$(grep -Pv "(? 21check_junrong_if_the_list_is_blocked.txt | grep "$line" | wc -l)
      

      这里解释一下这个正则表达式的含义:

      • -P 参数让grep使用Perl兼容的正则表达式。
      • -v 参数表示反向匹配,即输出不匹配该模式的行。
      • (? 是一个否定的前瞻断言,确保.之前不是非空白字符,这意味着我们寻找的是单词边界之后的点(.)。
      • \.(asp|php|txt) 匹配以.asp.php.txt结尾的部分。
      • (?![^\s]) 是另一个否定的前瞻断言,确保.之后也不是非空白字符,这意味着我们只排除那些点后面没有其他字符的(即这些后缀紧接在URL末尾)。

      这样,grep首先会排除掉所有以这三个后缀结尾的行,然后再根据您的$line变量进行进一步筛选并计数。这应该能满足您排除特定后缀访问记录的需求。

      评论
    • 阿齐Archie 嵌入式领域优质创作者 2024-05-28 15:07
      关注
      获得0.30元问题酬金

      以下参考免费微信小程序:皆我百晓生 作答,并由阿齐Archie整理回复,若还有疑问可评论或留言。

      要修改您的脚本,以便排除以 .asp.php.txt 结尾的访问记录,您可以使用 grep-v 选项(表示排除匹配的行)和扩展正则表达式模式来实现这一点。

      首先,我们需要在 grep 命令中添加 -E 选项来使用扩展正则表达式,并使用 -v 选项来排除那些以特定扩展名结尾的行。

      以下是修改后的脚本片段:

      while read line
      do
          # 使用 grep 排除所有以 .asp、.php 和 .txt 结尾的 URL
          r=$(grep -v -E "\.(asp|php|txt)$" "21check_junrong_if_the_list_is_blocked.txt" | grep "$line" | wc -l)
          
          if [ "$r" == "0" ]
          then
              echo "$line was not found num=0"
              echo "000不存在特别注意列表">>./tmp/pls_21_tebie_bucunzai_ip_`date +%Y%m%d`
              echo "$line"                >>./tmp/pls_21_tebie_bucunzai_ip_`date +%Y%m%d`
          else
              echo "$line is found num>=1"
              aa=$(grep "$line" "21check_junrong_if_the_list_is_blocked.txt")
              echo "000以下特别注意的列表"    >>./tmp/pls_21_tebie_cunzai_url_`date +%Y%m%d`
              echo "$aa"                      >>./tmp/pls_21_tebie_cunzai_url_`date +%Y%m%d`
              ## 在待检查的列表中“21check_junrong_if_the_list_is_blocked.txt” 删除含有特别注意内容的行
              sed -i "/$line/d" "21check_junrong_if_the_list_is_blocked.txt"
          fi
      done <./tmp/pls_21_tebiezhuyi_`date +%Y%m%d`.txt
      

      这里的关键改动是:

      1. grep 命令中使用了 -v -E "\.(asp|php|txt)$" 来排除所有以 .asp.php.txt 结尾的行。
      2. 通过 grep "$line" 检查是否包含特定的行,然后计算其数量。

      请注意,如果 $line 变量中包含特殊字符或空格,这可能会导致意外的结果。确保在实际环境中测试此脚本以验证它的准确性和安全性。

      展开全部

      评论
    • 妄北y 嵌入式领域优质创作者 2024-05-28 15:07
      关注
      获得0.30元问题酬金

      以下参考免费微信小程序:皆我百晓生 作答,并由妄北y整理回复。

      要排除包含特定后缀(如 .asp, .php, .txt)的访问记录,你可以在 grep 命令中使用 -v 选项来反向匹配这些后缀,或者使用 grep 的正则表达式功能来排除这些后缀。下面是一个修改后的脚本示例,使用正则表达式排除包含 .asp, .php, .txt 结尾的行。

      cat ./tmp/pls_21_tebiezhuyi_`date +%Y%m%d`.txt | while read line
      do
          # 使用正则表达式排除包含.asp、.php、.txt后缀的行
          r=$(cat 21check_junrong_if_the_list_is_blocked.txt | grep -vE '(\.asp|\.php|\.txt)$' | grep "$line" | wc -l)
          if [ "$r" -eq 0 ]
          then
              echo "$line was not found num=0"
              echo "000不存在特别注意列表" >> ./tmp/pls_21_tebie_bucunzai_ip_`date +%Y%m%d`
              echo "$line" >> ./tmp/pls_21_tebie_bucunzai_ip_`date +%Y%m%d`
          else
              echo "$line is found num>=1"
              aa=$(cat 21check_junrong_if_the_list_is_blocked.txt | grep -vE '(\.asp|\.php|\.txt)$' | grep "$line")
              echo "000以下特别注意的列表" >> ./tmp/pls_21_tebie_cunzai_url_`date +%Y%m%d`
              echo "$aa" >> ./tmp/pls_21_tebie_cunzai_url_`date +%Y%m%d`
              # 在待检查的列表中“21check_junrong_if_the_list_is_blocked.txt” 删除含有特别注意内容的行
              sed -i "/$line/d" 21check_junrong_if_the_list_is_blocked.txt
          fi
      done
      

      这里的关键改动是:

      1. 使用 grep -vE '(\.asp|\.php|\.txt)$' 来排除所有以 .asp, .php, .txt 结尾的行。其中 -v 是排除匹配的选项,-E 允许使用扩展正则表达式。
      2. 我将 grep 命令放在了 cat 命令的管道中,这样每次只处理需要排除特定后缀的行,而不是整个文件。

      请注意,这个脚本假设 pls_21_tebiezhuyi_ 文件中的每行都是一个独立的 URL。如果文件中的行格式不同,你可能需要调整 grep 命令以匹配正确的模式。此外,这个脚本使用 cat 来读取文件,这可能在处理非常大的文件时效率较低。如果遇到性能问题,可以考虑使用其他方法,如 awksed 来直接处理文件。

      展开全部

      评论
    • 码农阿豪@新空间代码工作室 Java领域优质创作者 2024-05-28 15:11
      关注
      获得0.30元问题酬金
      让阿豪来帮你解答,本回答参考chatgpt3.5编写提供,如果还有疑问可以评论或留言
      问题:如何解析给定的文本文件,并输出符合特定条件的行? 回答:
      1. 读取文件:使用命令 cat 读取文件,将其输出到终端或者通过重定向写入到另一个文件中,例如 cat filename.txt > output.txt
      2. 解析行:使用 awk 或者 sed 命令解析行,并输出符合条件的行到终端或者重定向到文件中,例如:
      3. 使用 awk 命令解析行,查找包含指定字符串的行并输出到终端: awk '/string/ {print}' filename.txt
      4. 使用 sed 命令解析行,查找包含指定字符串的行并输出到文件中: sed -n '/string/p' filename.txt > output.txt
      5. 排除指定类型的文件:使用 grep 命令筛选出不包含指定字符串的行,并通过 awk 或者 sed 命令进一步处理 例如,根据给出的脚本,可以将以下命令添加到脚本中,实现特定的排除文件类型的功能:
      # 排除以 .asp 和 .php 和 .txt 结尾的文件
      grep -vE '\.(asp|php|txt)$' 21check_junrong_if_the_list_is_blocked.txt | awk '{print $0}' > filtered.txt
      

      其中 grep -vE '\.(asp|php|txt)$' 用于排除以 .asp 和 .php 和 .txt 结尾的文件,| 连接符用于将上一个命令的输出作为下一个命令的输入,awk '{print $0}' 用于输出筛选后的行到文件中。 完整代码:

      #!/bin/bash
      # 读取文件,排除特定文件类型,输出到临时文件
      grep -vE '\.(asp|php|txt)$' 21check_junrong_if_the_list_is_blocked.txt | awk '{print $0}' > filtered.txt
      # 逐行解析文件,查找并输出符合条件的行到相应的文件中
      while read line
      do
          r=`grep \"$line\" filtered.txt | wc -l`
          if [ "$r" == "0" ]
          then
              echo "$line was not found num=0"
              echo "000不存在特别注意列表" >> /tmp/pls_21_tebie_bucunzai_ip_$(date +%Y%m%d)
              echo "$line" >> /tmp/pls_21_tebie_bucunzai_ip_$(date +%Y%m%d)
          else
              aa=`grep "$line" filtered.txt`
              echo "$line is found num=$r"
              echo "000以下特别注意的列表" >> /tmp/pls_21_tebie_cunzai_url_$(date +%Y%m%d)
              echo "$aa" >> /tmp/pls_21_tebie_cunzai_url_$(date +%Y%m%d)
              # 在待检查的列表中“21check_junrong_if_the_list_is_blocked.txt”删除含有特别注意内容的行
              sed -i "/$line/d" filtered.txt
          fi
      done < filtered.txt
      # 统计 filtered.txt 中的访问 URL 是否含有 upload 关键字的(文件是 .asp 和 .php 以及 .txt 的不统计)
      grep -E 'upload.*\.(do|jsp|html|htm)$' filtered.txt >> /tmp/pls_21_tebie_cunzai_url_$(date +%Y%m%d)
      # 删除临时文件
      rm filtered.txt
      

      注意事项: 1. 根据实际需要修改脚本中的文件名和路径 2. 在使用 awk 或者 sed 命令时,需要根据实际情况设置相应的解析规则 3. 在使用 grep 命令时,需要注意使用正则表达式排除特定文件类型

      展开全部

      评论
    • giser@2011 2024-05-28 16:08
      关注
      获得0.15元问题酬金

      参考GPT

      如果您想要在脚本中排除以.asp.php.txt为结尾的访问记录,您可以在grep命令中使用-v选项来排除这些匹配,或者使用awk命令来只匹配除了这些扩展名之外的记录。这里提供一个使用awk的示例,来修改您的脚本:

      while read line
      do
          # 使用awk来排除以.asp、.php、.txt结尾的行
          r=$(awk '$NF != ".asp" && $NF != ".php" && $NF != ".txt" {print $0}' 21check_junrong_if_the_list_is_blocked.txt | wc -l)
          if [ "$r" == "0" ]
          then
              echo "$line was not found num=0"
              echo "000不存在特别注意列表">>./tmp/pls_21_tebie_bucunzai_ip_`date +%Y%m%d`
              echo "$line"                >>./tmp/pls_21_tebie_bucunzai_ip_`date +%Y%m%d`
          else
              echo "$line is found num>=1"
              aa=$(awk '$NF != ".asp" && $NF != ".php" && $NF != ".txt" {print $0}' 21check_junrong_if_the_list_is_blocked.txt | grep "$line")
              echo "000以下特别注意的列表"    >>./tmp/pls_21_tebie_cunzai_url_`date +%Y%m%d`
              echo "$aa"                      >>./tmp/pls_21_tebie_cunzai_url_`date +%Y%m%d`
              # 在待检查的列表中“21check_junrong_if_the_list_is_blocked.txt” 删除含有特别注意内容的行
              # 注意:这里没有提供删除行的代码,因为删除操作应该谨慎执行,确保不会误删
          fi
      done <./tmp/pls_21_tebiezhuyi_`date +%Y%m%d`.txt
      

      请注意,上述脚本中没有包含删除匹配行的部分,因为删除操作需要谨慎处理,以防止误删数据。如果确定要删除匹配的行,可以使用awk{print $0}来获取整行内容,然后使用sed或者awk配合其他命令来删除这些行。

      在使用任何删除操作之前,建议先做好备份,以防不测。同时,请根据实际情况调整脚本,确保它符合您的具体需求。

      评论
    • wyx学习k8s 2024-05-28 16:08
      关注
      获得0.15元问题酬金

      r=grep "$line" 21check_junrong_if_the_list_is_blocked.txt|grep -vE "(\.asp|\.php|\.txt)$" wc -l

      评论
    • threenewbee 2024-05-28 17:34
      关注
      获得0.30元问题酬金
      评论
    • bug菌¹ Java领域优质创作者 2024-05-28 21:42
      关注
      获得0.30元问题酬金

      该回答引用ChatGPT,望对题主有所帮助/启发;若有帮助,还望采纳🤝🤝🤝


      要排除包含特定扩展名(如.asp、.php 和 .txt)的访问记录,你可以在 grep 命令中使用 -v 选项来反转匹配,即排除那些匹配特定模式的行。此外,你可以使用正则表达式来匹配文件扩展名。

      以下是修改后的脚本片段,展示了如何排除包含 .asp.php.txt 扩展名的行:

      while read line
      do
          # 使用grep排除包含.asp、.php和.txt的行
          r=$(grep -vE ".asp|.php|.txt" 21check_junrong_if_the_list_is_blocked.txt | grep "$line" | wc -l)
      
          if [ "$r" == "0" ]
          then
              echo "$line was not found num=0"
              echo "000不存在特别注意列表">>./tmp/pls_21_tebie_bucunzai_ip_`date +%Y%m%d`
              echo "$line"                >>./tmp/pls_21_tebie_bucunzai_ip_`date +%Y%m%d`
          else
              echo "$line is found num>=1"
              aa=$(grep "$line" 21check_junrong_if_the_list_is_blocked.txt)
              echo "000以下特别注意的列表"    >>./tmp/pls_21_tebie_cunzai_url_`date +%Y%m%d`
              echo "$aa"                      >>./tmp/pls_21_tebie_cunzai_url_`date +%Y%m%d`
              # 在待检查的列表中“21check_junrong_if_the_list_is_blocked.txt” 删除含有特别注意内容的行
              sed -i "/$line/d" 21check_junrong_if_the_list_is_blocked.txt
          fi
      done <./tmp/pls_21_tebiezhuyi_`date +%Y%m%d`.txt
      

      在这个脚本中,grep -vE ".asp|.php|.txt" 这一行的作用是排除所有包含 .asp.php.txt 的行。-v 选项表示选择非匹配的行,-E 选项表示使用扩展正则表达式。

      请注意,这个脚本假设每行记录的格式是固定的,并且 URL 是每行的最后一个字段。如果记录的格式有所不同,你可能需要调整 grepsed 命令中的匹配模式以适应实际的格式。

      另外,如果你的文件路径或模式包含特殊字符或空格,你可能需要对 $line 进行引号处理,以确保正确地处理这些情况。

      展开全部

      评论
    • 喵手 2024-05-28 22:29
      关注
      获得0.15元问题酬金

      该回答引用ChatGPT辅助答疑,若有帮助,还请题主采纳。


      你可以使用grep命令的-v选项来排除特定的记录。具体来说,你可以使用grep -v来排除含有.asp和.php以及.txt的访问记录。下面是一个示例:

      r=`grep -v -E "\.asp$|\.php$|\.txt$" 21check_junrong_if_the_list_is_blocked.txt | grep "$line" | wc -l`
      

      在这个示例中,我们使用了-E选项来启用扩展的正则表达式语法,并使用$符号来表示行结尾。这样就可以排除含有.asp和.php以及.txt的访问记录。

      希望这能帮到你!

      评论
    • Java毕设王 2024-05-29 00:26
      关注
      获得0.30元问题酬金

      引用讯飞星火
      要排除.asp和.php以及.txt的访问记录,可以在grep命令中使用正则表达式。将以下代码:

      r=`grep "$line"  21check_junrong_if_the_list_is_blocked.txt|wc -l`
      

      替换为:

      r=`grep -Ev "(\.asp|\.php|\.txt)$" <<< "$line"  21check_junrong_if_the_list_is_blocked.txt|wc -l`
      

      这里使用了grep的-E选项来支持扩展正则表达式,并使用-v选项来排除匹配的行。正则表达式中的(.asp|.php|.txt)$表示以.asp、.php或.txt结尾的字符串。

      评论
    • 大黄鸭duck. 2024-05-29 11:06
      关注
      获得0.15元问题酬金

      结合GPT给出回答如下请题主参考
      在CentOS 7.9,我们可以使用awk命令来过滤特定的访问记录内容。awk是一个文本处理工具,可以根据指定的条件对文本进行处理。

      以下是一个示例脚本,用于排除特定的访问记录内容:

      #!/bin/bash
      
      # 指定日志文件路径
      logfile="/var/log/httpd/access_log"
      
      # 定义要排除的内容
      excluded_content="admin.php"
      
      # 使用awk命令过滤日志文件内容
      awk -v excluded_content="$excluded_content" '$0 !~ excluded_content' $logfile
      

      上述脚本中,我们首先指定了要过滤的日志文件路径logfile/var/log/httpd/access_log。然后,我们定义了要排除的内容为admin.php

      awk命令中,我们使用了$0 !~ excluded_content的条件,表示只输出不包含excluded_content的行。$0代表整行内容,!~表示不匹配。

      你可以将上述脚本保存为一个文件,例如filter_logs.sh,并使用chmod +x filter_logs.sh命令赋予执行权限。然后,通过运行./filter_logs.sh命令来执行脚本。

      该脚本将输出排除了admin.php的访问记录内容。

      希望以上解释和示例代码能够满足你的需求。如果有任何进一步的问题,请随时提问。

      评论
    • 小明爱吃火锅 2024-05-29 17:56
      关注
      获得0.15元问题酬金

      引用文心一言回答:

      #!/bin/bash
      # 指定日志文件路径
      logfile="/var/log/httpd/access_log"
       
      # 定义要排除的内容
      excluded_content="admin.php"
       
      # 使用awk命令过滤日志文件内容
      awk -v excluded_content="$excluded_content" '$0 !~ excluded_content' $logfile
      
      
      评论
    • 东方佑 2024-05-29 22:04
      关注
      获得0.30元问题酬金

      您想要排除特定后缀的访问记录,可以使用grep命令的-v选项来排除匹配到的行,同时使用正则表达式来匹配.asp.php.txt后缀的记录。以下是修改后的脚本段落:

      while read line
      do
        # 使用grep -v排除.asp .php .txt后缀的记录,然后统计数量
        r=$(grep -v "\.asp$" -v "\.php$" -v "\.txt$" 21check_junrong_if_the_list_is_blocked.txt | grep "$line" | wc -l)
        if [ "$r" == "0" ]
        then
          echo "$line was not found num=0"
          echo "000不存在特别注意列表">>./tmp/pls_21_tebie_bucunzai_ip_`date +%Y%m%d`
          echo "$line"                >>./tmp/pls_21_tebie_bucunzai_ip_`date +%Y%m%d`
        else
          echo "$line is found num>=1"
          # 同样使用grep -v排除.asp .php .txt后缀的记录
          aa=$(grep -v "\.asp$" -v "\.php$" -v "\.txt$" 21check_junrong_if_the_list_is_blocked.txt | grep "$line")
          echo "000以下特别注意的列表"    >>./tmp/pls_21_tebie_cunzai_url_`date +%Y%m%d`
          echo "$aa"                      >>./tmp/pls_21_tebie_cunzai_url_`date +%Y%m%d`
          # 在待检查的列表中删除含有特别注意内容的行
          sed -i "/$line/d" 21check_junrong_if_the_list_is_blocked.txt
        fi
      done <./tmp/pls_21_tebiezhuyi_`date +%Y%m%d`.txt
      

      在这个脚本中,grep -v "\.asp$" -v "\.php$" -v "\.txt$"会排除所有以.asp.php.txt结尾的行。这样,$r变量中统计的将是不包含这些后缀的匹配行数。
      请根据您的实际需求将此脚本片段整合到您的完整脚本中。

      评论
    • guicai_guojia 2024-05-29 22:32
      关注
      获得0.15元问题酬金

      chatgpt回答如下

      您可以在 grep 命令中使用 -v 选项来排除指定的文件后缀,然后再使用 wc -l 命令来统计匹配行的数量。下面是您可以尝试的修改后的命令:

      r=$(grep "$line" 21check_junrong_if_the_list_is_blocked.txt | grep -v -E '\.asp$|\.php$|\.txt$' | wc -l)
      

      在这个命令中,-v 选项表示排除匹配的行,-E 选项用于启用扩展的正则表达式,\. 匹配点号,$ 表示行末。因此,'\.asp$|\.php$|\.txt$' 匹配以 .asp.php.txt 结尾的行。

      使用这个命令,grep 将首先从文件中筛选出包含关键字的行,然后通过 grep -v 排除指定文件后缀的行,最后通过 wc -l 统计剩余的匹配行数。

      评论
    • yy64ll826 2024-05-30 10:19
      关注
      评论
    • 程序员SUMER 2024-05-30 10:33
      关注

      设置权限就完事了,so easy

      评论
    • DTcode7 前端领域优质创作者 2024-05-30 16:35
      关注
      获得0.30元问题酬金

      答案引用自chatgpt生成,望对题主有所帮助/启发;若有帮助,还望采纳!

      在CentOS 7.9中,排除特定的访问记录可以通过配置防火墙规则来实现。这里我们使用iptables作为防火墙工具。以下是一个简单的示例,展示了如何排除特定IP地址的访问记录。

      首先,我们需要创建一个脚本文件,例如block_ip.sh,并在其中编写以下内容:

      #!/bin/bash
      # 需要排除的IP地址
      BLOCKED_IP="192.168.1.100"
      
      # 添加防火墙规则,禁止指定IP地址访问
      iptables -A INPUT -s $BLOCKED_IP -j DROP
      
      # 保存防火墙规则
      service iptables save
      

      接下来,我们需要给脚本文件添加可执行权限:

      chmod +x block_ip.sh
      

      最后,运行脚本文件以应用防火墙规则:

      ./block_ip.sh
      

      这样,我们就成功地排除了特定IP地址(例如192.168.1.100)的访问记录。当然,你可以根据实际需求修改脚本中的IP地址和其他参数。

      评论
    • Roc-xb 后端领域优质创作者 2024-05-31 14:47
      关注
      获得0.30元问题酬金

      要在脚本中排除带有特定扩展名(如.asp.php.txt)的访问记录,可以使用grep命令的排除选项-v。具体来说,你可以在使用grep命令时通过正则表达式来排除这些扩展名的记录。

      以下是如何修改你的脚本以排除.asp.php.txt的访问记录:

      #!/bin/bash
      
      # 读取特别注意的列表
      while read line
      do
          # 统计不含有.asp、.php以及.txt的访问记录
          r=$(grep "$line" 21check_junrong_if_the_list_is_blocked.txt | grep -Ev '\.asp|\.php|\.txt' | wc -l)
          
          if [ "$r" == "0" ]
          then
              echo "$line was not found num=0"
              echo "000不存在特别注意列表" >> ./tmp/pls_21_tebie_bucunzai_ip_$(date +%Y%m%d)
              echo "$line" >> ./tmp/pls_21_tebie_bucunzai_ip_$(date +%Y%m%d)
          else
              echo "$line is found num>=1"
              aa=$(grep "$line" 21check_junrong_if_the_list_is_blocked.txt | grep -Ev '\.asp|\.php|\.txt')
              echo "000以下特别注意的列表" >> ./tmp/pls_21_tebie_cunzai_url_$(date +%Y%m%d)
              echo "$aa" >> ./tmp/pls_21_tebie_cunzai_url_$(date +%Y%m%d)
              # 在待检查的列表中删除含有特别注意内容的行
              sed -i "/$line/d" 21check_junrong_if_the_list_is_blocked.txt
          fi
      done < ./tmp/pls_21_tebiezhuyi_$(date +%Y%m%d).txt
      
      # 统计21check_junrong_if_the_list_is_blocked.txt 中的访问URL是否含有upload关键字的(文件是.asp和.php以及.txt的不统计)
      grep 'upload' 21check_junrong_if_the_list_is_blocked.txt | grep -Ev '\.asp|\.php|\.txt' >> ./tmp/pls_21_tebie_cunzai_url_$(date +%Y%m%d)
      

      解释

      1. 排除特定扩展名的记录

        • 使用grep -Ev '\.asp|\.php|\.txt'来排除包含.asp.php.txt扩展名的记录。
        • -E选项启用扩展正则表达式,-v选项表示排除匹配的行。
      2. 修改统计部分

        • 将原来的grep "$line" 21check_junrong_if_the_list_is_blocked.txt | wc -l替换为grep "$line" 21check_junrong_if_the_list_is_blocked.txt | grep -Ev '\.asp|\.php|\.txt' | wc -l
      3. 修改特别注意列表部分

        • 将原来的aa=$(grep "$line" 21check_junrong_if_the_list_is_blocked.txt)替换为aa=$(grep "$line" 21check_junrong_if_the_list_is_blocked.txt | grep -Ev '\.asp|\.php|\.txt')
      4. 统计含有upload关键字的记录

        • 直接使用grep 'upload' 21check_junrong_if_the_list_is_blocked.txt | grep -Ev '\.asp|\.php|\.txt'来过滤并输出到指定文件。

      这样修改后,脚本会排除带有.asp.php.txt扩展名的访问记录,并只处理其他记录。

      展开全部

      评论
    • CrMylive. Python领域新星创作者 2024-06-02 17:09
      关注
      获得0.30元问题酬金

      结合GPT给出回答如下请题主参考
      在CentOS 7.9上排除特定的访问记录内容,可以通过使用rsyslog工具和正则表达式来实现。rsyslog是一个强大的系统日志处理工具,可以过滤和修改日志消息。

      以下是一个简单的脚本,用于排除包含特定内容的访问记录:

      1. 确保系统已安装rsyslog工具:

        sudo yum install rsyslog -y
        
      2. 编辑rsyslog配置文件/etc/rsyslog.conf

        sudo vi /etc/rsyslog.conf
        
      3. 在配置文件的末尾添加以下内容,用于定义过滤规则:

        :msg, contains, "特定内容" ~
        

        这个规则将过滤掉包含"特定内容"的日志消息。

      4. 保存并关闭文件。

      5. 重启rsyslog服务以使更改生效:

        sudo systemctl restart rsyslog
        

      这样,rsyslog将不再记录包含特定内容的访问记录。

      请注意,这只是一个简单的示例脚本,用于演示如何排除特定的访问记录内容。具体的正则表达式和过滤规则应根据实际需求进行调整。

      另外,也可以使用awk命令来排除特定内容的访问记录。以下是一个示例脚本,使用awk命令过滤日志文件并将结果输出到新文件:

      #!/bin/bash
      
      # 定义要排除的特定内容
      exclude_string="特定内容"
      
      # 定义日志文件路径
      log_file="/var/log/access.log"
      
      # 定义输出文件路径
      output_file="/var/log/access_filtered.log"
      
      # 使用awk过滤日志文件
      awk -v exclude="$exclude_string" '!($0 ~ exclude)' $log_file > $output_file
      

      将上述脚本保存为一个.sh文件,并通过以下命令执行:

      bash script.sh
      

      这样,脚本将从/var/log/access.log文件中排除包含"特定内容"的行,并将结果输出到/var/log/access_filtered.log文件中。

      需要注意的是,以上脚本仅适用于文本类型的日志文件,对于二进制格式的日志文件不能直接使用。对于二进制格式的日志文件,可以考虑使用专门的日志解析工具进行处理。

      希望以上信息对您有帮助!

      展开全部

      评论
    • 杨同学* 2024-06-03 17:21
      关注
      获得0.30元问题酬金

      参考gpt
      要排除文件名以 .asp.php.txt 结尾的访问记录,可以使用 grep 命令的反向匹配(即 -v 选项),结合正则表达式来排除这些特定文件。以下是修改后的脚本:

      #!/bin/bash
      
      # 创建特定关注列表文件名
      attention_list="./tmp/pls_21_tebiezhuyi_$(date +%Y%m%d).txt"
      
      # 创建特定不存在列表文件名
      not_exist_file="./tmp/pls_21_tebie_bucunzai_ip_$(date +%Y%m%d)"
      exist_file="./tmp/pls_21_tebie_cunzai_url_$(date +%Y%m%d)"
      
      # 创建检查列表文件名
      check_list="21check_junrong_if_the_list_is_blocked.txt"
      
      # 特定排除的文件扩展名
      exclude_patterns="\.\(asp\|php\|txt\)$"
      
      # 清空不存在和存在的输出文件
      > "$not_exist_file"
      > "$exist_file"
      
      while read -r line
      do
          r=$(grep -E "$line" "$check_list" | grep -Ev "$exclude_patterns" | wc -l)
          if [ "$r" -eq 0 ]; then
              echo "$line was not found num=0"
              echo "000不存在特别注意列表" >> "$not_exist_file"
              echo "$line" >> "$not_exist_file"
          else
              echo "$line is found num>=1"
              aa=$(grep -E "$line" "$check_list" | grep -Ev "$exclude_patterns")
              echo "000以下特别注意的列表" >> "$exist_file"
              echo "$aa" >> "$exist_file"
              # 在待检查的列表中删除含有特别注意内容的行
              sed -i "/$line/d" "$check_list"
          fi
      done < "$attention_list"
      

      说明

      1. 排除特定文件扩展名的正则表达式

        • exclude_patterns="\.\(asp\|php\|txt\)$" 用于匹配 .asp.php.txt 结尾的文件。
      2. **双重 grep**:

        • grep -E "$line" "$check_list" 首先匹配包含 line 的所有行。
        • grep -Ev "$exclude_patterns" 然后排除包含指定文件扩展名的行。
      3. 清空输出文件

        • > 操作符用于在脚本执行前清空指定的输出文件。
      4. 确保文件路径和命令的准确性

        • 检查文件名和路径是否正确。
        • 确保脚本中的所有文件路径都正确无误。

      这样可以确保脚本在运行时,正确地排除了 .asp.php.txt 结尾的访问记录,并将其余符合条件的记录输出到相应的文件中。

      展开全部

      评论
    • Minuw 2024-06-04 22:25
      关注
      获得0.15元问题酬金

      参考gpt
      根据您的描述,您想要修改脚本中的一行代码来排除包含特定文件扩展名(.asp、.php 和 .txt)的访问记录。您可以使用grep命令的-v选项来反转匹配结果,从而排除包含特定文件扩展名的记录。

      具体来说,您可以将代码修改为以下形式:

      r=$(grep "$line" 21check_junrong_if_the_list_is_blocked.txt | grep -v -E '\.asp|\.php|\.txt' | wc -l)
      

      这行代码将在执行匹配时排除包含.asp.php.txt文件扩展名的记录。这样,$r变量将包含匹配结果。

      希望这个建议对您有所帮助!如果您有任何其他问题或需要进一步的帮助,请随时告诉我。

      评论
    • GIS工具开发 2024-06-04 23:15
      关注
      获得0.15元问题酬金

      可以使用awk命令来过滤掉包含asp、php和txt后缀的行

      评论
    • 会跑的小鹿 2024-06-04 23:30
      关注
      获得0.15元问题酬金

      可以在 grep 命令中使用 -v 选项来反向匹配这些后缀,或者使用 grep 的正则表达式功能来排除这些后缀。

      评论
    编辑
    预览

    报告相同问题?

  • 相关阅读:
    Nacos服务注册
    普通人网上赚钱,抖音机会仍旧会非常大!
    SD6.23集训总结
    SAP S4 BC 关于ABAP write 方式展示的清单 导出excel的问题
    【Spring】SpringBoot+Actuator+Prometheus+Grafana监控实现及常见问题处理
    【PHP】php中JSON或数组到formData的键值对转换
    基于MATLAB的图像条形码识别系统(matlab毕毕业设计2)
    【NodeJs-5天学习】第四天存储篇⑤ ——PM2,node.js应用进程管理器
    java家居门户网站计算机毕业设计MyBatis+系统+LW文档+源码+调试部署
    Android学习笔记 1.2.5 Gradle插件和java、application等插件 && 1.2.6 依赖管理
  • 原文地址:https://ask.csdn.net/questions/8110523