Bash

Bash - 拆分前面的命令參數

  • September 12, 2020

如何在 bash 中解析前一個命令?

例子:

root$ ssh foo@1.2.3.4
root$ echo !$ &>/tmp/foo.txt
root$ cat /tmp/foo.txt
foo@1.2.3.4

目標:

僅將 ipaddress 發送 1.2.3.4到 foo.txt


我嘗試使用awk,但沒有成功

#doesn't work
cat /tmp/foo.txt |awk '{print $2,$3,$4}' 

我還嘗試使用 sed 僅解析數字

#doesn't work
sed 's/.//p' /tmp/foo.txt 
sed 's/[0-9]//p' /tmp/foo.txt

注意事項

1.2.3.4 始終是介於 0.0.0.0 和 255.255.255.255 之間的數字

使用者名foo可以是任意長度

foo@1.2.3.4不一定是傳遞給 ssh 的唯一參數(例如 ssh 1.2.3.4 -l foo)

資源

進一步

說明 最終目標是在我的 .bashrc 中創建一個函式,讓我可以輕鬆刪除衝突的 ssh 密鑰。

root$ ssh foo@1.2.3.4  
#some big error message warning about man in the middle attack
root$ ssh-keygen -R 1.2.3.4

使用您的原始語法:

$ cat /tmp/foo.txt | awk -F@ '{print $2}'

1.2.3.4

如果您可以為 ssh 命令使用另一種語法,它會變得更容易:

ssh -l foo 1.2.3.4 
echo !:3 

但這需要這種精確的語法。

引用自:https://unix.stackexchange.com/questions/84005