如何在awk中搜索包含空格的模式?

时间:2016-05-14 12:27:22

标签: bash search awk whitespace

我想搜索一个有点复杂的模式,我已经知道我必须指出\ |而不是|在脚本中,但如何包含空格以匹配这个确切的模式。

    TR40663|c0_g1_i2|m.33339 TR40663|c0_g1_i2|g.33339 ORF TR40663|c0_g1_i2|g.33339 TR40663|c0_g1_i2|m.33339 type:5prime_partial len:1730 (+) TR40663\|c0_g1_i2:3-5192(+) [specie]

我必须使用此代码检索与 模式相关的序列

    awk 'BEGIN{RS=">";FS="\n"}NR>1{if ($1~/pattern) print ">"$0}' file

我不知道〜/是否也在乱码。稍后我将在多个文件中传递一个元素列表,但是现在我想先检查这个模式/搜索。

感谢您的帮助

2 个答案:

答案 0 :(得分:0)

~/不是运营商。 ~是regexp comparsion运算符,/.../是静态正则表达式分隔符。从/中删除~/,因为我确定语法错误已经告诉您这样做。

使用dymamic regexp的语法是:

awk -v re='foo \\| bar' '$0 ~ re' file

或:

awk -v re='foo [|] bar' '$0 ~ re' file

永远不要使用pattern这个词,因为它有歧义和误导性。在awk中,你应该总是使用单词regexpstring,而shell使用的globbing patterns与函数和语法中的regexp类似,但在语义上却大不相同。

答案 1 :(得分:0)

如果pattern awk变量,其中包含表示正则表达式的字符串,则必须编写

if ($1 ~ pattern)

no slashes

如果pattern只是你实际正则表达式问题的占位符,那么你就错过了结尾斜杠:

if ($1 ~ /pattern\|goes\|here/)

注意:

  • ~/不是awk运营商
  • 正则表达式匹配运算符为~
  • 文字正则表达式模式用斜杠括起来:/foo.*bar/