用sed匹配开始和结束行

时间:2014-12-09 23:56:01

标签: regex bash sed

我在/tmp/text

中有以下文字
Trying 127.0.0.1...
Connected to 127.0.0.1.
Escape character is '^]'.

telnet> show counter
5737

telnet> exit

并尝试获取该行中单独出现的数字5737,并在正则表达式中匹配^[0-9]*$。那是我的sed

cat /tmp/text | sed -En 's/(^[0-9]*$)/\1/p'

但它什么都不匹配,任何想法都错了?

3 个答案:

答案 0 :(得分:1)

sed-expression对我来说很好看。 Telnet可能会输出(可能不可见)^ M-newlines,导致表达式无效。你可以试试

cat /tmp/text | sed -En 's/(^[0-9]+(^M)?$)/\1/p'

然后按Ctrl + V然后按Ctrl + M创建^ M.这是我能想到的唯一解释。

答案 1 :(得分:0)

使用

$ awk '/telnet> show counter/{l=1;next}l==1{print;exit}' file

也许你正在以错误的方式做事,这个命令是你所期望的吗? :

nc 127.0.0.1 <YOUR_OWN_PORT> <<< 'show counter'

(使用

答案 2 :(得分:0)

这对你的情况来说已经足够了。

$ sed -n '/^[0-9]\+$/p' file
5737

它只打印具有一个或多个数字的行。由于您输入的文件包含空行,sed -n '/^[0-9]*$/p' file也会打印空白行。 *重复前一个标记零次或多次,+重复前一个标记一次或多次。