我想搜索一个有点复杂的模式,我已经知道我必须指出\ |而不是|在脚本中,但如何包含空格以匹配这个确切的模式。
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
我不知道〜/是否也在乱码。稍后我将在多个文件中传递一个元素列表,但是现在我想先检查这个模式/搜索。
感谢您的帮助
答案 0 :(得分:0)
~/
不是运营商。 ~
是regexp comparsion运算符,/.../
是静态正则表达式分隔符。从/
中删除~/
,因为我确定语法错误已经告诉您这样做。
使用dymamic regexp的语法是:
awk -v re='foo \\| bar' '$0 ~ re' file
或:
awk -v re='foo [|] bar' '$0 ~ re' file
永远不要使用pattern
这个词,因为它有歧义和误导性。在awk中,你应该总是使用单词regexp
或string
,而shell使用的globbing patterns
与函数和语法中的regexp类似,但在语义上却大不相同。
答案 1 :(得分:0)
如果pattern
是 awk变量,其中包含表示正则表达式的字符串,则必须编写
if ($1 ~ pattern)
no slashes 。
如果pattern
只是你实际正则表达式问题的占位符,那么你就错过了结尾斜杠:
if ($1 ~ /pattern\|goes\|here/)
注意:
~/
不是awk运营商~
/foo.*bar/