在bash第一次出现另一个字符串之后找到一个字符串第一次出现

时间:2019-05-31 06:09:12

标签: awk grep

我有一个看起来像这样的输入文件,我希望第一次出现单词,但仅在第一次出现特殊单词之后

只有数字了,所以我知道我得到了正确的字符串

编辑:我意识到字符串中带有/的问题很重要

words/and/stuff #1
words/more #2
some/other/words #3
special/this #1
words/i/need/you/i.really.need.you #4
special/cool #2 
words/random #5

在我发现“特殊”的第一次出现之后,我试图找到“单词”的第一次出现

输出应为

words/i/need/you/i.really.need.you #4

我尝试了以下

grep -m1 special file | grep -m1 words file 

awk 'NR==1,/special/ && NR==1,/words/ {print $0}' file 

3 个答案:

答案 0 :(得分:1)

尝试:

$ awk '/special/{f=1} f && /words/ {print; exit}' file 
words/i/need/you/i.really.need.you #4

工作原理:

  • /special/{f=1}

    如果当前行与special相匹配,则将变量f设置为1

  • f && /words/ {print; exit}

    如果f非零且当前行与words匹配,则打印当前行并退出。

带斜杠的单词

如果您要匹配的单词不仅被斜杠包围,而且包括斜杠,则相同的代码也有效。只是有必要逃脱斜线。例如,如果我们要在words/i/need之后寻找special一词,

$ awk '/special/{f=1} f && /words\/i\/need/ {print; exit}' file 
words/i/need/you/i.really.need.you #4

答案 1 :(得分:0)

快速专用的 $arrColFields= array(); $arrColFields["lngCngSecUserId"] = 0; $arrColFields["sdtHolidayDate"] = 1; $tblActualHoliday["ColHeader"] = $arrColFields; ?> 脚本

您可以为此使用

sed

将从您的样本中输出:

sed -e  '/special/,${ /word/q;d };d' file
  • 从包含 words #4 的行到输入结尾,

    • 如果行中确实包含 special ,则退出
    • 其他删除行。
  • 否则,删除行。

,作为有关bash的问题标题:

word

答案 2 :(得分:0)

请您尝试以下。

awk '
$0=="words"{
  count++
  if(special_count==1){
    print "String words count is: "count
    exit
  }
}
/special/{
  special_count++
}
'  Input_file