首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >试图从文本文件中获取所需的输出

试图从文本文件中获取所需的输出
EN

Unix & Linux用户
提问于 2023-01-21 09:42:27
回答 1查看 85关注 0票数 0

我在文本文件中有这样的输出,其中^M表示CR

代码语言:javascript
运行
复制
Last login: Sat Jan 22 09:49:50 2023 from 10.1.1.1^M

Cisco Router

uptime
exit -f
Connecting user mike from 10.1.1.1
****************************************** Warning ******************************************^M
^M
Warning monitoring.^M
^M
*********************************************************************************************^M
[ ne ]^M
mike@grv1.nue99.de> uptime^M
^[[1A^[[2K^[[1A^[[2Kmike@grv1.nue99.de> uptime^M
9 days,  3:43^M
[ ne ]^M
mike@grv1.nue99.de> exit -f^M
Shutting down the session^M
^M
Connection closed
Last login: Sat Jan 21 09:49:49 2023 from  10.1.1.1^M
Cisco Router

uptime
exit -f
Connecting user mike from  10.1.1.1
****************************************** Warning ******************************************^M
^M
Warning monitoring.^M^M
^M
*********************************************************************************************^M
^M
[ ne ]^M
mike@grv2.nue99.de> uptime^M
^[[1A^[[2K^[[1A^[[2Kmike@grv2.nue99.de> uptime^M
10 days,  3:43^M
[ ne ]^M
mike@grv2.nue99.de> exit -f^M
Shutting down the session^M
^M
Connection closed
Last login: Sat Jan 21 09:49:49 2023 from  10.1.1.1^M

Cisco Router

uptime
exit -f
Connecting user mike from  10.1.1.1
****************************************** Warning ******************************************^M
^M

^M
*********************************************************************************************^M
^M
[ ne ]^M
mike@grv1.nue98.de> uptime^M
^[[1A^[[2K^[[1A^[[2Kmike@grv1.nue98.de> uptime^M
11 days,  3:43^M
[ ne ]^M
mike@grv1.nue98.de> exit -f^M
Shutting down the session^M
^M
Connection closed
Last login: Sat Jan 21 09:49:49 2023 from  10.1.1.1^M

Cisco Router

uptime
exit -f
Connecting user mike from  10.1.1.1
****************************************** Warning ******************************************^M
^M

^M
*********************************************************************************************^M
^M
[ ne ]^M
mike@grv2.nue98.de> uptime^M
^[[1A^[[2K^[[1A^[[2Kmike@grv2.nue98.de> uptime^M
12 days,  3:43^M
[ ne ]^M
mike@grv2.nue99.de> exit -f^M
Shutting down the session^M
^M
Connection closed

^M

我正试图实现这样的输出

代码语言:javascript
运行
复制
grv1.nue99.de> uptime  9 days, 3:43
grv2.nue99.de> uptime 10 days, 3:43
grv1.nue98.de> uptime 11 days, 3:43
grv2.nue98.de> uptime 12 days, 3:43

我试过了

代码语言:javascript
运行
复制
awk '/mike@.*> uptime/ {print;getline;print}' testbeta1.text > testbeta2.txt 
sed 's/mike@//g; s/> uptime/> uptime /g' test.txt > test1.txt 
grep -oP 'mike@.*uptime.*\K[0-9]+\sdays.*' testbeta.text

有人能帮我达到预期的输出吗?

EN

回答 1

Unix & Linux用户

回答已采纳

发布于 2023-01-21 10:23:21

试试这个:

代码语言:javascript
运行
复制
cat testbeta1.text | tr -d "\r" | tr "\n" " " | tr -s " " | grep -Eo 'mike@[^>]+> uptime [0-9]+ days, [0-9]+:[0-9]+' | cut -d "@" -f 2-

解释:

  • tr -d "\r":删除所有CR字符
  • tr "\n" " ":将每个LF字符替换为一个空格
  • tr -s " ":仅用一个空格替换重复空间的每个序列
  • grep -Eo 'mike@[^>]+> uptime [0-9]+ days, [0-9]+:[0-9]+':获取接受正则表达式的所有序列(-E),并且只接受它们(-o)
  • cut -d "@" -f 2-:在第一个'@‘字符之后获得行的部分

以你为例:

代码语言:javascript
运行
复制
> cat testbeta1.text | tr -d "\r" | tr "\n" " " | tr -s " " | grep -Eo 'mike@[^>]+> uptime [0-9]+ days, [0-9]+:[0-9]+' | cut -d "@" -f 2-
grv1.nue99.de> uptime 9 days, 3:43
grv2.nue99.de> uptime 10 days, 3:43
grv1.nue98.de> uptime 11 days, 3:43
grv2.nue98.de> uptime 12 days, 3:43
票数 0
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/732555

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档