如何使用cut和grep在unix中打印一系列字符?

时间:2016-04-08 14:04:32

标签: linux unix grep cut

我可以使用(cut -d)指定分隔符来打印字符块。

# grep -i access.log| grep ' 500 '| cut -d\- -f1 

但是如何在特定模式“address=tel%3A%2B

之后打印字符

例如:如何在此文件中打印整个电话号码?

begining of the line address=tel%3A%2B416xxxxxxx rest of the log
begining of the line address=tel%3A%2B647xxxxxxx rest of the log
begining of the line address=tel%3A%2B519xxxxxxx rest of the log

...

3 个答案:

答案 0 :(得分:1)

我尝试cut -c打印行中具有特定位置的字符,因为大多数行都遵循相同的模式,所以它有效。 该行的位置从1开始。

# grep -i test.log| grep ' 500 '|cut -c1-5 

这里1:是角色的起始位置。

这里5:要打印的最后一个字符的位置。

所以例如:

#cat test.log
this is address=tel%3A%2B416xxxxxxx
this is address=tel%3A%2B647xxxxxxx
this is address=tel%3A%2B519xxxxxxx

#cut -c26-36 test.log 
416xxxxxxx
647xxxxxxx
519xxxxxxx

答案 1 :(得分:0)

sed -e 's,.*address=tel%3A%2B\([^ ]\+\).*,\1,g' <<EOF                          
begining of the line address=tel%3A%2B416xxxxxxx rest of the log                
begining of the line address=tel%3A%2B647xxxxxxx rest of the log                
begining of the line address=tel%3A%2B519xxxxxxx rest of the log                
EOF

输出:

416xxxxxxx
647xxxxxxx
519xxxxxxx

答案 2 :(得分:0)

这不是grep和/或cut的工作,它是sed或awk的工作:

$ sed 's/.*address=tel%3A%2B\([^ ]*\).*/\1/' file
416xxxxxxx
647xxxxxxx
519xxxxxxx

$ awk '{gsub(/.*address=tel%3A%2B| .*/,"")}1' file
416xxxxxxx
647xxxxxxx
519xxxxxxx