[英]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.