首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何与awk或sed或grep进行第一次匹配和第二次匹配(忽略第一次匹配)?

如何与awk或sed或grep进行第一次匹配和第二次匹配(忽略第一次匹配)?
EN

Stack Overflow用户
提问于 2022-11-22 12:32:09
回答 4查看 59关注 0票数 1
代码语言:javascript
复制
> root# ps -ef | grep [j]ava |  awk '{print $2,$9}'                                                             
> 45134 -Dapex=APEC
> 45135 -Dapex=JAAA
> 45136 -Dapex=APEC

我需要把第一次亚太经合组织的第一次PID,亚太经合组织的第三行,第二次PID,最后一次PID作为第三次PID。

我试过了,但没有预期的结果。

代码语言:javascript
复制
> First_PID =ps -ef | grep [j]ava |  awk '{print $2,$9}'|awk '{if ($0 == "[^0-9]" || $1 == "APEC:") {print $0; exit;}}'

预期的结果应该是这样的。

代码语言:javascript
复制
> First_PID=45134
> Second_PID=45136
> Third_PID=45135
EN

回答 4

Stack Overflow用户

发布于 2022-11-22 12:41:21

在显示的示例和尝试中,请尝试遵循awk代码。用GNU awk编写和测试。

代码语言:javascript
复制
ps -ef | grep [j]ava | 
awk '
{
  val=$2 OFS $9
  match(val,/([0-9]+) -Dapex=APEC ([0-9]+) -Dapex=JAAA\s([0-9]+)/,arr)
  print "First_PID="arr[1],"Second_PID=",arr[3],"Third_PID=",arr[2]
}
'
票数 2
EN

Stack Overflow用户

发布于 2022-11-22 15:53:27

这个怎么样:

代码语言:javascript
复制
$ input=("1 APEC" "2 JAAA" "3 APEC")
$ printf '%s\n' "${input[@]}" | grep APEC | sed -n '2p'
3 APEC

解释:

  • input=(...) -在数组中输入数据,对于testing
  • printf '%s\n' "${input[@]}" - print input数组,每个line
  • grep APEC保持包含APEC only
  • sed -n的一行-运行sed而没有自动print
  • sed -n '2p' -只打印第二行

票数 1
EN

Stack Overflow用户

发布于 2022-11-22 22:23:00

如果你只想先得到APECs ..。

代码语言:javascript
复制
ps -ef |
  awk '/java[ ].* -Dapex=APEC/{print $2" "$9; next; }
       /java[ ]/{non[NR]=$2" "$9}
       END{ for (rec in non) print non[rec] }'

如果可能的话,使用一个数组来代替那些通常命名为vars的数组。

代码语言:javascript
复制
mapfile -t pids < <( ps -ef | awk '/java[ ].* -Dapex=APEC/{print $2; next; }
 /java[ ]/{non[NR]=$2} END{ for (rec in non) print non[rec] }' )
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74532675

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档