coo*_*490 -1 regex linux perl grep
假设我有一个名为的文件'test.txt':
>reference1
fooHappybar
>reference2
fooBirthdaybar
Run Code Online (Sandbox Code Playgroud)
我需要一个grep命令,将捕获的字符串foo和bar线直接在比赛上面,和.该命令应该导致以下输出:
>reference1
Happy
>reference2
Birthday
Run Code Online (Sandbox Code Playgroud)
这是我到目前为止:
grep -oP 'foo\K\w+(?=bar)' test.txt
Run Code Online (Sandbox Code Playgroud)
这使:
Happy
Birthday
Run Code Online (Sandbox Code Playgroud)
我知道grep -B 1在比赛前输出比赛和线路.我试过了:
grep -oP -B 1 'foo\K\w+(?=bar)' test.txt
Run Code Online (Sandbox Code Playgroud)
但这不起作用.
任何指导表示赞赏.
编辑:
awk如果我有这个文件,命令将如何改变?
>reference1
AGTCTGCAFOOHAPPYBARGTACAC
>reference2
GTACAFOOBIRTHDAYBARGACCAT
Run Code Online (Sandbox Code Playgroud)
预期产量:
>reference1
HAPPY
>reference2
BIRTHDAY
Run Code Online (Sandbox Code Playgroud)
Grep解决方案
grep -zPo '(foo)\K(\w+(?=bar))|.*(?=\n(?1)(?2))' | tr '\0' '\n'
Run Code Online (Sandbox Code Playgroud)
Perl解决方案
perl -nE '/^foo(.*)bar$/&&say$p.$1;$p=$_'
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
174 次 |
| 最近记录: |