テキストファイルから目的の出力を取得しようとしています

テキストファイルから目的の出力を取得しようとしています

^MCRが表すテキストファイルにこの出力があります。

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
[email protected]> uptime^M
^[[1A^[[2K^[[1A^[[[email protected]> uptime^M
9 days,  3:43^M
[ ne ]^M
[email protected]> 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
[email protected]> uptime^M
^[[1A^[[2K^[[1A^[[[email protected]> uptime^M
10 days,  3:43^M
[ ne ]^M
[email protected]> 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
[email protected]> uptime^M
^[[1A^[[2K^[[1A^[[[email protected]> uptime^M
11 days,  3:43^M
[ ne ]^M
[email protected]> 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
[email protected]> uptime^M
^[[1A^[[2K^[[1A^[[[email protected]> uptime^M
12 days,  3:43^M
[ ne ]^M
[email protected]> exit -f^M
Shutting down the session^M
^M
Connection closed

^M

私はこのような結果を得ようとしています。

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

頑張りました

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

誰かが私が望む結果を得るのを助けることができますか?

答え1

別のawk解決策。私はtrすべての行からCR文字を削除しました。内容全体(コメントを除く#)はおそらく比較的読みにくい1行に圧縮できますが、ここでは読みやすくするために複数行にわたって表示されています。

tr -d '\r' <script |
awk -F'[@ ]' '
    # If we have a hostname set, print it and the uptime value; reset for next time
    host && /:/ {printf "%s uptime %s\n", host, $0; host=""}

    # Capture hostname if input matches ">" from the prompt and keyword "uptime"
    !host && />/ && /uptime/ {host=$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

答え2

この試み:

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 " ":繰り返されるスペースの各順序を1つのスペースに置き換えます。
  • grep -Eo 'mike@[^>]+> uptime [0-9]+ days, [0-9]+:[0-9]+'-E:正規表現を許可するすべてのシーケンスを取得し()、そのシーケンスのみを取得します(-o
  • cut -d "@" -f 2-@:行の最初の「」文字の次の部分を取得します。

あなたの例を見てください:

> 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

関連情報