使用 grep 获取特定行
get specific lines with grep
我想解析这样的文本:
# cmd: Text_finder --outdir 1
# No Text found
# cmd: Text_finder --outdir 2
ID_Text ID element pos_beg pos_end model type default distance
Text_01 tt 001 38 108 1 6.3e-05 No
Text_01 tt 002 454 517 1 1.9e-05 No
Text_01 tt_c7 003 1276 1362 1 2.2e-08 No
# cmd: Text_finder --outdir 3
# No Text found
# cmd: Text_finder --outdir 4
# No Text found
# cmd: Text_finder --outdir 5
ID_Text ID element pos_beg pos_end model type default distance
Text_01 tt 001 38 108 1 6.3e-05 No
为了检索以“Text_01”(结果)、“ID_Text”(标题)开头的行以及“ID_Text”之前的行(以“#cmd”开头:"但也很常见,没有结果我想下车)。
我尝试合并并执行这些行:
#get lines with "ID_text" and "text_01"
grep -P "ID_text|text_01" result.txt > positive-results.txt;
#get line before line with "ID_text"
grep -B1 "ID_text" result.txt > positive-results.txt;
但我无法获得这样的文件:
# cmd: Text_finder --outdir 2
ID_Text ID element pos_beg pos_end model type default distance
Text_01 tt 001 38 108 1 6.3e-05 No
Text_01 tt 002 454 517 1 1.9e-05 No
Text_01 tt_c7 003 1276 1362 1 2.2e-08 No
# cmd: Text_finder --outdir 5
ID_Text ID element pos_beg pos_end model type default distance
Text_01 tt 001 38 108 1 6.3e-05 No
你有聪明的方法吗?
非常感谢
$ grep --no-group-separator -B 1 "^\(Text_01\|ID_Text\)" file
输出:
# cmd: Text_finder --outdir 2
ID_Text ID element pos_beg pos_end model type default distance
Text_01 tt 001 38 108 1 6.3e-05 No
Text_01 tt 002 454 517 1 1.9e-05 No
Text_01 tt_c7 003 1276 1362 1 2.2e-08 No
# cmd: Text_finder --outdir 5
ID_Text ID element pos_beg pos_end model type default distance
Text_01 tt 001 38 108 1 6.3e-05 No
man grep
:
-B NUM, --before-context=NUM
Print NUM lines of leading context before matching lines.
Places a line containing a group separator (--) between
contiguous groups of matches.
有趣的是,我的手册页没有对 --no-group-separator
的解释,但在没有它的情况下尝试上面一次,你就会看到。
我想解析这样的文本:
# cmd: Text_finder --outdir 1
# No Text found
# cmd: Text_finder --outdir 2
ID_Text ID element pos_beg pos_end model type default distance
Text_01 tt 001 38 108 1 6.3e-05 No
Text_01 tt 002 454 517 1 1.9e-05 No
Text_01 tt_c7 003 1276 1362 1 2.2e-08 No
# cmd: Text_finder --outdir 3
# No Text found
# cmd: Text_finder --outdir 4
# No Text found
# cmd: Text_finder --outdir 5
ID_Text ID element pos_beg pos_end model type default distance
Text_01 tt 001 38 108 1 6.3e-05 No
为了检索以“Text_01”(结果)、“ID_Text”(标题)开头的行以及“ID_Text”之前的行(以“#cmd”开头:"但也很常见,没有结果我想下车)。
我尝试合并并执行这些行:
#get lines with "ID_text" and "text_01"
grep -P "ID_text|text_01" result.txt > positive-results.txt;
#get line before line with "ID_text"
grep -B1 "ID_text" result.txt > positive-results.txt;
但我无法获得这样的文件:
# cmd: Text_finder --outdir 2
ID_Text ID element pos_beg pos_end model type default distance
Text_01 tt 001 38 108 1 6.3e-05 No
Text_01 tt 002 454 517 1 1.9e-05 No
Text_01 tt_c7 003 1276 1362 1 2.2e-08 No
# cmd: Text_finder --outdir 5
ID_Text ID element pos_beg pos_end model type default distance
Text_01 tt 001 38 108 1 6.3e-05 No
你有聪明的方法吗?
非常感谢
$ grep --no-group-separator -B 1 "^\(Text_01\|ID_Text\)" file
输出:
# cmd: Text_finder --outdir 2
ID_Text ID element pos_beg pos_end model type default distance
Text_01 tt 001 38 108 1 6.3e-05 No
Text_01 tt 002 454 517 1 1.9e-05 No
Text_01 tt_c7 003 1276 1362 1 2.2e-08 No
# cmd: Text_finder --outdir 5
ID_Text ID element pos_beg pos_end model type default distance
Text_01 tt 001 38 108 1 6.3e-05 No
man grep
:
-B NUM, --before-context=NUM
Print NUM lines of leading context before matching lines.
Places a line containing a group separator (--) between
contiguous groups of matches.
有趣的是,我的手册页没有对 --no-group-separator
的解释,但在没有它的情况下尝试上面一次,你就会看到。