删除文本行中选项卡(包含选项卡)之前的所有字符串

时间:2014-09-22 13:43:08

标签: sed grep

文本文件(文件名:1.txt):

Incoming_Queries_A:     13201096
Incoming_Queries_A6:    946
Incoming_Queries_AAAA:  1288191
Incoming_Queries_ANY:   31280
Incoming_Queries_AXFR:  5
Incoming_Queries_CNAME: 410
Incoming_Queries_DS:    20
Incoming_Queries_MX:    854
Incoming_Queries_NS:    97217
Incoming_Queries_PTR:   1011409
Incoming_Queries_SOA:   5006
Incoming_Queries_SPF:   1
Incoming_Queries_SRV:   3555
Incoming_Queries_TXT:   511
Incoming_Requests_IQUERY:       11
Incoming_Requests_NOTIFY:       1
Incoming_Requests_QUERY:        15640501
Incoming_Requests_STATUS:       1
Incoming_Requests_UPDATE:       5

我想删除文本行中tab(包含标签)之前的所有字符串,并将输出(例如:13201096)打印到标准输出。

示例:

# egrep -i "Incoming_Queries_A:" ./1.txt | sed  's/.Incoming_Queries_A:\t//'

输出:

Incoming_Queries_A:     13201096

但我只想输出 13201096

如何解决?感谢

4 个答案:

答案 0 :(得分:2)

由于您只需要第二列,因此可以使用cut:

cut -f2 file.txt

答案 1 :(得分:2)

sed不会在bash上自动处理转义的字符(例如\t\n)。您可以通过两种不同的方式处理它:

  • 您可以使用表达式中的实际标签替换\t。要点击终端中的标签,请执行Control-V,然后点击TAB键: Ctrl - V ,然后按 Tab

  • (这个看起来更优雅,IMO)您可以强制sed解释您的\t,方法是在替换字符串前加$。这样,您的命令就像:

    egrep -i "Incoming_Queries_A:" ./1.txt | sed $'s/Incoming_Queries_A:\t//'
    

(我在.之前删除了Incoming_Queries_A: - 可能是一个错字/绝望的暂定词

希望有所帮助。

答案 2 :(得分:0)

使用awk你可以这样做:

awk '{print $2}' 1.txt
13201096
946
1288191
31280
5
410
20
854
97217
1011409
5006
1
3555
511
11
1
15640501
1
5

awk '/Incoming_Queries_A:/ {print $2}' /tmp/t.txt仅获取您想要的行

答案 3 :(得分:0)

你可以尝试下面的GNU sed命令,

sed -r 's/^.*\t//' file