簡體   English   中英

使用SSH,在文件中搜索字符串,並在最后一次出現時返回其旁邊的值

[英]Using SSH, search a file for a string and return the value next to it in the last occurence

我試圖找到一種方法來提取監視數據文件的值並進一步使用它。 使用SSH連接(使用密碼),我想訪問一個位於遠程的文件。 我要在此文件中搜索特定的傳感器名稱。 由於此文件包含來自許多傳感器和不同時間步長的數據,因此我想選擇最后一個(最新)字符串,該字符串旁邊的是傳感器值,我想將其復制並寫入本地數據文件中,在編程中進一步使用它。 我可以將整個文件從服務器復制到本地,但是整個文件很大,而且文件每小時都在變化。

時間傳感器名稱傳感器值

25-05-2018; 15:24 t_amb 24.8

25-05-2018; 15:24 t_room 21.2

25-05-2018; 15:24 G_global 120

25-05-2018; 15:25 t_amb 25

25-05-2018; 15:25 t_room 21

25-05-2018; 15:25 G_global 227.8

例如,在上面提到的文件中,該文件位於通過SSH端口連接的另一台計算機上,我只想搜索字符串't_room'並在遠程文件中查找它的最后一次出現,並將值寫在將其“ 21”存儲到本地目錄中的文件中。

編輯:或多或少,我想做類似的事情,但我想用Python代替bash腳本:

sshpass -piHEM_MT17 ssh 192.168.101.53 "keysight" | egrep "SP_t_5_roh" | cut -d" " -f4 | tail -n 1 > /run/user/1000/temperaturtest.txt

您可以將數據通過管道傳遞到grep以選擇tail包含“ t_room”的最后一行,然后使用awk打印以空格分隔的第三列。

例如,如果您的數據保存在log.txt中:

cat log.txt | grep t_room | tail -n 1 | awk -F" " '{print $3}'

您可能需要進行一些小的更改,但這可以輕松地逐字進行。

import pexpect
import re

def fetch_sensor_last(sensor_name):
    c = pexpect.spawn('ssh user@hostaddress')
    c.expect(': ') # wait for password prompt
    c.sendline('yourpassword')
    c.expect('$ ') # wait for unix prompt
    c.sendline('cat /full/path/to/log.txt | grep %s | tail -n 1')
    c.expect('$ ')
    c.close() # close ssh child process
    tail_output = c.before.splitlines()[0] # get command output

    # regex matches date, time, and sensor value (see www.regex101.com)
    match = re.match(
        rb'(\d+\-\d+\-\d+);(\d+:\d+)\s+\w+\s+([\d\.]+)', tail_output) 
    if match:
        return match.groups()

date, time, value = fetch_sensor_last(sensor_name)

Pexpect本質上是在bash中運行使用它生成的命令,然后只需.expect('pattern')即可等待預期的(顯然是同名的)提示或其他文本模式。 如果需要檢索文本,通常的方法是先等待下一個提示,然后訪問存儲在.before中的bytes對象,以獲取自上一個.expect()命令以來的所有ascii字節。

如果您需要對自動化進行故障排除,建議您在python之外手動運行該命令,然后逐步執行該過程並記錄您需要處理的所有提示(包括rsa警告提示等),並確保您沒有缺少任何東西。

請注意,您從pexpect獲得的字符串都是bytes對象,您可以通過bytesobj.decode()將它們轉換為普通的python字符串。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM