我正在尝试编写shell脚本,以便在Jenkins管道日志文件中找到已批准的用户。我把管道脚本的一部分放在这里。如何选择'MPPortal管理员‘或任何用户名后面的’批准‘字?我对shell脚本很陌生,我也不知道要怎么做。
Timeout set to expire in 1 hr 30 min
[Pipeline] {
[Pipeline] input
APPROVE?
Proceed or Abort
Approved by MPPortal Administrator
[Pipeline] }
[Pipeline] // timeout
[Pipeline] }
[Pipeline] // timeout
[Pipeline] }
[Pipeline] // stage
[Pipeline] stage
[Pipeline] { (Library Policy Evaluation)
[Pipeline]
我试过的
grep Approved pipeline.log
然后输出是
Approved by MPPortal Administrator
预期产出:
MPPortal Administrator
发布于 2022-05-05 23:54:43
使用sed
$ sed -n 's/^Approved[^[:upper:]]*\(.*\)/\1/p' input_file
MPPortal Administrator
使用awk
$ awk '$1=="Approved" {print $3,$4}' input_file
MPPortal Administrator
使用grep
和cut
$ grep '^Approved by' input_file | cut -d' ' -f3-4
MPPortal Administrator
发布于 2022-05-05 23:54:21
正如目前的答案已经显示的那样,有一些无用的方法可以做到这一点。这里还有几个:
awk和sed:搜索行,使用删除部分
$ awk '/Approved by/{sub(/Approved by */,""); print}' file
$ sed '/Approved by/!d;s/Approved by *//'
$ sed -n '/Approved by/s/Approved by *//'
awk:搜索行,通过重新定义字段删除部件:
$ awk '/Approved by/{$1=$2="";$0=$0;$1=$1;print}' file
这将搜索“批准”一词。如果这些单词出现在行中,则删除第一个和第二个字段(这些是“批准的”)。这将在字符串的其余部分之前保留几个空格。因此,通过将主记录重新分配给自己($0=$0
),我们重新定义了字段。这里仍然有空间,但是现在我们可以重新分配$1=$1
,它重写记录并删除空间。无趣,但有效。
使用perl正则表达式的grep:
$ grep -oP "Approved by\s\K.*" file
$ grep -oP "(?<=Approved by).*" file
在第一部分中,我们搜索整行,但是使用\K
,我们删除了前面匹配的所有内容(\s
是空白的),第二部分使用了一个回顾语句。
发布于 2022-05-05 23:57:32
需要考虑的两个备选方案:
使用awk:
awk '$1 == "Approved" { print $3, $4 }' pipeline.log
使用grep/sed
grep 'Approved' pipeline.log | sed -e 's/^Approved by //'
https://stackoverflow.com/questions/72137900
复制相似问题