Gig*_*iux 2 grep bash newlines
我正在使用 grep 解析文件,屏幕上的输出包含换行符,如下所示:
$ grep 'gene' sequence.gb
gene 89..1483
/gene="non-structural protein"
/gene="non-structural protein"
/gene="non-structural protein"
/gene="non-structural protein"
/gene="non-structural protein"
/gene="non-structural protein"
/gene="non-structural protein"
gene complement(1987..2763)
/gene="nucleocapsid protein"
/gene="nucleocapsid protein"
Run Code Online (Sandbox Code Playgroud)
我可以将它分配给一个变量并用换行符打印出来:
$ gene=$(grep 'gene' sequence.gb)
echo "$gene"
gene 89..1483
/gene="non-structural protein"
/gene="non-structural protein"
/gene="non-structural protein"
/gene="non-structural protein"
/gene="non-structural protein"
/gene="non-structural protein"
/gene="non-structural protein"
gene complement(1987..2763)
/gene="nucleocapsid protein"
/gene="nucleocapsid protein"
Run Code Online (Sandbox Code Playgroud)
但这不包含真正的换行符,因为如果我再次 grep 包含 '..' 的行,我会得到很多:
$ echo "$gene" | grep '..'
gene 89..1483
/gene="non-structural protein"
/gene="non-structural protein"
/gene="non-structural protein"
/gene="non-structural protein"
/gene="non-structural protein"
/gene="non-structural protein"
/gene="non-structural protein"
gene complement(1987..2763)
/gene="nucleocapsid protein"
/gene="nucleocapsid protein"
Run Code Online (Sandbox Code Playgroud)
我们可以通过不使用引号看到这是一个单一的字符串:
$ echo $gene
gene 89..1483 /gene="non-structural protein" /gene="non-structural protein" /gene="non-structural protein" /gene="non-structural protein" /gene="non-structural protein" /gene="non-structural protein" /gene="non-structural protein" gene complement(1987..2763) /gene="nucleocapsid protein" /gene="nucleocapsid protein"
Run Code Online (Sandbox Code Playgroud)
所以我的问题是,如何维护或引入换行符格式?
谢谢
Joh*_*024 12
因为.
是正则表达式通配符,grep '..'
匹配至少有两个字符的每一行:
$ echo "$gene" | grep '..'
gene 89..1483
/gene="non-structural protein"
/gene="non-structural protein"
/gene="non-structural protein"
/gene="non-structural protein"
/gene="non-structural protein"
/gene="non-structural protein"
/gene="non-structural protein"
gene complement(1987..2763)
/gene="nucleocapsid protein"
/gene="nucleocapsid protein"
Run Code Online (Sandbox Code Playgroud)
在正则表达式中,.
它真的很疯狂:它不仅可以匹配任何字母或数字,还可以匹配任何标点符号、空格、制表符或任何其他字符。
要仅匹配句点,请使用-F
:
$ echo "$gene" | grep -F '..'
gene 89..1483
gene complement(1987..2763)
Run Code Online (Sandbox Code Playgroud)
-F
是--fixed-strings
并告诉grep
将模式视为固定字符串,而不是正则表达式的缩写。
或者,您可以转义句号,以便它们仅匹配句号(帽子提示:Nick):
$ echo "$gene" | grep '\.\.'
gene 89..1483
gene complement(1987..2763)
Run Code Online (Sandbox Code Playgroud)
或者我们可以grep
通过将它们放在字符类中来强制将句点视为文字句点(帽子提示:dave_thompson):
$ echo "$gene" | grep '[.][.]'
gene 89..1483
gene complement(1987..2763)
Run Code Online (Sandbox Code Playgroud)
但是,如果您不需要正则表达式,请使用,-F
因为它使grep
处理速度更快。
归档时间: |
|
查看次数: |
3179 次 |
最近记录: |