我可以使用(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
...
答案 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