Awk 仅获取匹配模式后的字符串,并排除所有其他内容
我想得到匹配模式后的字符串,并排除所有其他内容。比如说,Awk 仅获取匹配模式后的字符串,并排除所有其他内容,awk,sed,grep,Awk,Sed,Grep,我想得到匹配模式后的字符串,并排除所有其他内容。比如说, Nov 17 21:52:06 web01-san roundcube: <he1v330n> User dxxssjksdfd [121.177.26.200]; \ Message for undisclosed-recipients:, stanpiatt@yahoo.com Nov 17 21:48:26 web01-san roundcube: <fqu8k29l> User cxcnjdfdssd [1
Nov 17 21:52:06 web01-san roundcube: <he1v330n> User dxxssjksdfd [121.177.26.200]; \
Message for undisclosed-recipients:, stanpiatt@yahoo.com
Nov 17 21:48:26 web01-san roundcube: <fqu8k29l> User cxcnjdfdssd [121.177.26.200]; \
Message for undisclosed-recipients:, stanpiatt@yahoo.com
我尝试了grep-Po'User\K[^\s]*'
但它没有给出我想要的。我该怎么做 解决方案一:
下面的awk
也会对您有所帮助
awk -v RS=" " '/User/{getline;print "User",$0}' Input_file
输出如下
User dxxssjksdfd
User cxcnjdfdssd
解决方案2:您也可以通过查看行的字段来使用以下内容
awk '{for(i=1;i<=NF;i++){if($i ~ /User/){print $i,$(i+1)}}}' Input_file
使用awk
$ awk 'match($0,/User [^ ]*/){ print substr($0, RSTART,RLENGTH)}' infile
User dxxssjksdfd
User cxcnjdfdssd
$ awk 'match($0,/User [^ ]*/,arr){ print arr[0]}' infile
User dxxssjksdfd
User cxcnjdfdssd
使用GNUawk
$ awk 'match($0,/User [^ ]*/){ print substr($0, RSTART,RLENGTH)}' infile
User dxxssjksdfd
User cxcnjdfdssd
$ awk 'match($0,/User [^ ]*/,arr){ print arr[0]}' infile
User dxxssjksdfd
User cxcnjdfdssd
说明:
/User[^\s]*/
逐字匹配用户字符(区分大小写)User
- 匹配下面列表中不存在的单个字符
[^\s]*
量词-在零次和无限次之间匹配,尽可能多地匹配,根据需要返回(贪婪)*
匹配任何空白字符(等于\s
)[\r\n\t\f\v]
$ awk 'match($0,/User [^ ]*/){ print substr($0, RSTART,RLENGTH)}' infile
User dxxssjksdfd
User cxcnjdfdssd
$ awk 'match($0,/User [^ ]*/,arr){ print arr[0]}' infile
User dxxssjksdfd
User cxcnjdfdssd