Jac*_*ieg 4 regex awk grep sed
我想提取使用匹配模式之后的第N行grep,awk或sed.
例如,我有这段文字:
Revision:
60000<br />
Run Code Online (Sandbox Code Playgroud)
我想提取60000.
我尝试过Revision:([a-z0-9]*)\s*([0-9]){5}将修订版与修订版号一起匹配,但是当我将它传递给grep时:grep Revision:([a-z0-9]*)\s*([0-9]){5} file.html我什么都没得到.
我怎样才能做到这一点?
Ed *_*ton 19
要extract the Nth line after a matching pattern你想要的:
awk 'c&&!--c;/pattern/{c=N}' file
Run Code Online (Sandbox Code Playgroud)
例如
awk 'c&&!--c;/Revision:/{c=5}' file
Run Code Online (Sandbox Code Playgroud)
会在文本"Revision:"/之后打印第5行.
仅供参考以下习语描述如何在给定特定模式匹配的情况下选择一系列记录:
a)从某种模式打印所有记录:
awk '/pattern/{f=1}f' file
Run Code Online (Sandbox Code Playgroud)
b)在某些模式后打印所有记录:
awk 'f;/pattern/{f=1}' file
Run Code Online (Sandbox Code Playgroud)
c)在某种模式后打印第N条记录:
awk 'c&&!--c;/pattern/{c=N}' file
Run Code Online (Sandbox Code Playgroud)
d)打印每条记录后,除了一些模式的第N个记录:
awk 'c&&!--c{next}/pattern/{c=N}1' file
Run Code Online (Sandbox Code Playgroud)
e)在某些模式后打印N条记录:
awk 'c&&c--;/pattern/{c=N}' file
Run Code Online (Sandbox Code Playgroud)
F)打印后,除了一些模式的N条记录每一条记录:
awk 'c&&c--{next}/pattern/{c=N}1' file
Run Code Online (Sandbox Code Playgroud)
g)从某种模式打印N条记录:
awk '/pattern/{c=N}c&&c--' file
Run Code Online (Sandbox Code Playgroud)
我从"F"改为变量名的"发现",以"C"为"计数"在适当情况下为这更多表现的是什么变量实际上是.
在lnb第一个空白/空行之后打印第th行:
要打印的行索引(在 bash shell 中):
lnb=2
Run Code Online (Sandbox Code Playgroud)
使用sed:
sed -ne '/^\s*$/{:a;n;0~'"$lnb"'!ba;p;q}' my_file`
Run Code Online (Sandbox Code Playgroud)使用perl:
perl -ne '/^\s+$/ && $k++;$k!=0 && $k++ && $k=='"$lnb"'+2 && (print,last)' my_file`
Run Code Online (Sandbox Code Playgroud)在正则表达式匹配后打印第lnbth行:
使用sed:
sed -ne '/regex/{:a;n;0~'"$lnb"'!ba;p;q}' my_file
Run Code Online (Sandbox Code Playgroud)使用perl:
perl -ne '/regex/ && $k++;$k!=0 && $k++ && $k=='"$lnb"'+2 && (print,last)' my_file
Run Code Online (Sandbox Code Playgroud)
奖励 1,Windows PowerShell(先安装 Perl):
$lnb=2
perl -ne "/regex/ && `$k++;`$k!=0 && `$k++ && `$k==$lnb+2 && (print,last)" my_file
Run Code Online (Sandbox Code Playgroud)
奖励 2,Windows DOS 命令行:
set lnb=2
perl -ne "/regex/ && $k++;$k!=0 && $k++ && $k==%lnb%+2 && (print,last)" my_file
Run Code Online (Sandbox Code Playgroud)在正则表达式匹配后打印所有lnbth行:
使用perl(bash 示例):
perl -ne '/regex/ && $k++;$k!=0 && $k++ && $k=='"$lnb"'+2 && (print,$k=0)' my_file
Run Code Online (Sandbox Code Playgroud)