如何在 awk 中搜索包含空格的模式?
How to search a pattern including the whitespaces in awk?
我想搜索一个有点复杂的模式,我已经学会了我必须指出\|而不是 |在脚本中,但我如何包含空格以匹配这个确切的模式。
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 (~/pattern) print ">"[=11=]}' file
我不知道 ~/ 是否也在搞乱代码。稍后我将传递多个文件中的元素列表,但现在我想先检查这个 pattern/search。
感谢帮助
~/
不是运算符。 ~
是正则表达式比较运算符,/.../
是静态正则表达式定界符。从 ~/
中删除 /
,因为我确信语法错误已经告诉你这样做了。
使用动态正则表达式的语法是:
awk -v re='foo \| bar' '[=10=] ~ re' file
或:
awk -v re='foo [|] bar' '[=11=] ~ re' file
切勿使用 pattern
一词,顺便说一句,因为它含糊不清且具有误导性。在 awk 中,您应该始终使用 regexp
或 string
,而 shell 使用 globbing patterns
,它们在功能和语法上与正则表达式相似,但在语义上有很大不同。
如果 pattern
是一个 awk 变量,它包含一个代表正则表达式的字符串,那么你必须写
if ( ~ pattern)
没有斜线。
如果 pattern
只是您问题中实际正则表达式的占位符,那么您缺少结尾斜杠:
if ( ~ /pattern\|goes\|here/)
备注:
~/
不是 awk 运算符
- 正则表达式匹配运算符是
~
- 文字正则表达式模式用斜杠括起来:
/foo.*bar/
我想搜索一个有点复杂的模式,我已经学会了我必须指出\|而不是 |在脚本中,但我如何包含空格以匹配这个确切的模式。
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 (~/pattern) print ">"[=11=]}' file
我不知道 ~/ 是否也在搞乱代码。稍后我将传递多个文件中的元素列表,但现在我想先检查这个 pattern/search。
感谢帮助
~/
不是运算符。 ~
是正则表达式比较运算符,/.../
是静态正则表达式定界符。从 ~/
中删除 /
,因为我确信语法错误已经告诉你这样做了。
使用动态正则表达式的语法是:
awk -v re='foo \| bar' '[=10=] ~ re' file
或:
awk -v re='foo [|] bar' '[=11=] ~ re' file
切勿使用 pattern
一词,顺便说一句,因为它含糊不清且具有误导性。在 awk 中,您应该始终使用 regexp
或 string
,而 shell 使用 globbing patterns
,它们在功能和语法上与正则表达式相似,但在语义上有很大不同。
如果 pattern
是一个 awk 变量,它包含一个代表正则表达式的字符串,那么你必须写
if ( ~ pattern)
没有斜线。
如果 pattern
只是您问题中实际正则表达式的占位符,那么您缺少结尾斜杠:
if ( ~ /pattern\|goes\|here/)
备注:
~/
不是 awk 运算符- 正则表达式匹配运算符是
~
- 文字正则表达式模式用斜杠括起来:
/foo.*bar/