sed / awk:从文本流中提取模式

时间:2011-08-04 08:08:24

标签: bash sed awk grep

2011-07-01 ... /home/todd/logs/server_log_1.log ...
2011-07-02 ... /home/todd/logs/server_log_2.log ...
2011-07-03 ... /home/todd/logs/server_log_3.log ...

我有一个如上所示的文件。我想从中提取文件名并输出到STDOUT:

server_log_1.log
server_log_2.log
server_log_3.log

有人可以帮忙吗?谢谢!

文件名模式是server_log_xxx.log,它只在一行中出现一次。

4 个答案:

答案 0 :(得分:21)

假设“xxx”占位符仅为数字:

grep -o 'server_log_[0-9]\+\.log'

答案 1 :(得分:7)

通过以下命令管道文件:

sed 's/.*\(server_log_[0-9]\+\.log\).*/\1/'

答案 2 :(得分:1)

使用awk和输入模式:

awk 'BEGIN {FS="/"}
     { print gensub(" .*$","","g",$5) }' INPUTFILE

在此处查看操作:https://ideone.com/kcadh

HTH

答案 3 :(得分:0)

sed 's|.*/\([^/ ]*\).*|\1|' infile