簡體   English   中英

在Bash輸出中獲取特定文本

[英]Get Specific Text in Bash Output

我想從這個輸出中獲取ip但是idk how.Is有可能將輸出限制為我想要的。

VPN Connection Setting Name                          |kap1
Destination VPN Server Host Name                     |159.89.199.192
Destination VPN Server Port Number                   |5252
Destination VPN Server Virtual Hub Name              |kap
Proxy Server Type                                    |Direct TCP/IP 

另一個問題。 ip有端口。 我只想要ip。 對不起,另一個問題。 感謝大家的幫助。

VPN Connection Setting Name |kap1
Status                      |Connected
VPN Server Hostname         |159.89.199.192:5252 (Direct TCP/IP Connection)

考慮您共享的數據保存在文件中。 文件名:file.txt

$grep 'VPN Server Host Name' file.txt | awk -F '|' '{print $2}'
159.89.199.192

編輯:由於OP說OP有不同類型的Input_file,所以現在相應地添加解決方案。

awk '/Hostname/ && match($0,/[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+/){print substr($0,RSTART,RLENGTH)}' Input_file

以下awk可以幫到你。

awk -F"|" '/Destination VPN Server Host Name/ && $2 ~ /[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+/{print $2}'  Input_file

要么

your_command | awk -F"|" '/Destination VPN Server Host Name/ && $2 ~ /[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+/{print $2}'

想象一下你有一個輸入文件:

$ cat vpn_info 
Item                                  |Value
--------------------------------------+--------
VPN Connection                        |kap1
Destination VPN Server Host Name      |159.89.199.192
Destination VPN Server Port Number    |5252
...
...

然后,您可以使用以下命令之一:

AWK:

awk -F '|' '/^Destination VPN Server Host Name/{print $2}' vpn_info                                                            
159.89.199.192

你定義了| 作為字段分隔符,然后在行以Destination VPN Server Host Name開頭時打印輸入的第二個字段

SED:

sed -n 's/^Destination VPN Server Host Name *|//p' vpn_info 
159.89.199.192

您要求sed替換^Destination VPN Server Host Name *| 什么都沒有,當它工作時你打印結果。

第二輸入:

$ cat vpn_info 
Item                                  |Value
--------------------------------------+--------
VPN Connection                        |kap1
VPN Server Hostname                   |159.89.199.192:5252 (Direct TCP/IP Connection)

AWK

$ awk -F '[:|]' '/VPN Server Hostname/{print $2}' vpn_info                                                         
159.89.199.192

您可以使用此awk命令指定2個字段分隔符:| 並在到達包含VPN Server Hostname的行時打印第二個字段

這可能適合你(GNU sed):

sed -r '/\n/!s/([0-9]{1,3}\.){3}[0-9]{1,3}/\n&\n/;/^\S+[0-9]\n/P;D' file

按換行符覆蓋所有IP地址,僅打印匹配的字符串。

第一個正則表達式尋找換行符。 換行符是sed用於分隔它放置在模式空間(PS)中的字符串的內容。 因此,通常情況下,除非用戶通過替換命令引入換行符,否則永遠不會在PS中找到換行符。 所以第一個命令說“除非模式空間中已經有新行,即已經進行了以下替換。使用換行符包圍一個看起來像IP地址的字符串”。 IP地址匹配一到三個數字,后跟一個句點,發生三次,后跟一到三位數。 下一個sed命令打印任何這樣的IP地址,最后一個命令刪除PS中的第一行,無論它是否是IP地址。 如果PS為空,則按照D命令,讀取下一行,否則再次循環執行命令。 因此,命令的總體效果是在單獨的行上列出所有IP地址。

暫無
暫無

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

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