我想获取匹配模式之后出现的字符串并排除其他所有内容。例如说,
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
Run Code Online (Sandbox Code Playgroud)
所以我想在模式之后只获取字符串User并排除其他所有内容,因此输出应该是
User dxxssjksdfd
User cxcnjdfdssd
Run Code Online (Sandbox Code Playgroud)
我已经尝试过grep -Po 'User\K[^\s]*',但它没有给出我想要的。我怎样才能做到这一点 ?
$ cat infile\nNov 17 21:52:06 web01-san roundcube: <he1v330n> User dxxssjksdfd [121.177.26.200]; \\\nMessage for undisclosed-recipients:, stanpiatt@yahoo.com\nNov 17 21:48:26 web01-san roundcube: <fqu8k29l> User cxcnjdfdssd [121.177.26.200]; \\\nMessage for undisclosed-recipients:, stanpiatt@yahoo.com\nRun Code Online (Sandbox Code Playgroud)\n\n使用grep
$ grep -Po 'User [^\\s]*' infile\nUser dxxssjksdfd \nUser cxcnjdfdssd \nRun Code Online (Sandbox Code Playgroud)\n\n使用awk
$ awk 'match($0,/User [^ ]*/){ print substr($0, RSTART,RLENGTH)}' infile\nUser dxxssjksdfd\nUser cxcnjdfdssd\nRun Code Online (Sandbox Code Playgroud)\n\n使用GNU awk
$ awk 'match($0,/User [^ ]*/,arr){ print arr[0]}' infile\nUser dxxssjksdfd\nUser cxcnjdfdssd\nRun Code Online (Sandbox Code Playgroud)\n\n解释:
\n\n/User [^\\s]*/
User匹配字符 User 字面意思(区分大小写)[^\\s]**量词 \xe2\x80\x94 匹配零次到无限次,尽可能多的次数,根据需要回馈(贪婪)\\s匹配任何空白字符(等于[\\r\\n\\t\\f\\v ])| 归档时间: |
|
| 查看次数: |
12213 次 |
| 最近记录: |