如果字符串中的两个单词不匹配,则获取字符串



在Linux系统上,我有一些这样的输出:

Subject = CN=User_A,OU=users
Status = Valid   Kind = IKE   Serial = 98505   DP = 9
Not_Before: Wed Jun 15 13:53:55 2022   Not_After: Sun Jun 25 08:25:20 2023
Subject = CN=User_B,OU=users
Status = Valid   Kind = IKE   Serial = 98934   DP = 8
Not_Before: Sun Apr 18 18:24:16 2021   Not_After: Fri Apr 21 18:24:16 2023

我可以使用| grep 2022 | grep Jun来查找某些数据,但是如何在输出中获得Subject line ?我需要获取证书即将过期的用户名)类似于"Show me the Subject if "grep 2022 | grep Jun"

提前感谢!

这个呢:

grep -B 2 "2022" test.txt | grep -o "CN=[A-Za-z0-1_]*" | cut -c 4-
grep -B 2     // show the matching line and two lines before too.
[A-Za-z0-1_]* // any character, being letters, digits and an underscore
grep -o "CN=[...]" 
// show only the part, containing "CN=", followed by ...
cut -c 4-     // instead of "CN=...", only show "..." (starting at 4th character)

使用grep

$ grep -m2 -e '^Subject' -e 'Jun' -e '2022' input_file
Subject = CN=User_A,OU=users
Not_Before: Wed Jun 15 13:53:55 2022   Not_After: Sun Jun 25 08:25:20 2023

使用sed

$ sed -n '/^Subject/{p;:a;n;/Jun|2022/p;ba}' input_file
Subject = CN=User_A,OU=users
Not_Before: Wed Jun 15 13:53:55 2022   Not_After: Sun Jun 25 08:25:20 2023

最新更新