与grep进行第一场比赛

cyb*_*mon 2 bash grep

我有一个bash函数,它遍历某个单词的文件和greps列表并将其写入文件.问题是我得到了单词的每个实例,我只想得到第一个实例.我通过添加head -1grep 遇到了一个解决方案,但是现在,当我调用它时,我的函数就会挂起.

 83 function processAppLogs {
 84         for i in `find $log_des -name $fname`
 85             do
 86                 p=$i
 87                 d=${p//applog.txt/unmountTimestampList.txt}
 88                 grep "UNMOUNTED"  $i >> $d
 89                 grep "PATIENT ID" | head -1 | $i >> $d
 90             done
 91 }
Run Code Online (Sandbox Code Playgroud)

我只想grep第一个"PATIENT ID"实例,但我想我可能有错误的语法?这是grep第一个实例并将其写入文件的正确方法吗?

fed*_*qui 8

您可以-m 1用来表示您只想匹配一次:

grep -m 1 "PATIENT ID" >> "$d"
Run Code Online (Sandbox Code Playgroud)

来自man grep:

-m NUM, - max-count = NUM

NUM匹配行后停止读取文件.

测试

$ seq 8 12
8
9
10
11
12
$ seq 8 12 | grep 1 -m 1
10
$ seq 8 12 | grep 1 -m 2
10
11
Run Code Online (Sandbox Code Playgroud)

  • "有点担心答案的质量:如果没有解释,我不会赞成任何事情;"这里没有解释.淘气! (2认同)