Bash
如何使用 sed 從字元串中剪斷一行?
我正在編寫一個腳本來顯示域註冊商資訊,我正在嘗試從我已經擁有的內容中剪掉幾行我目前擁有它從 whois 中獲取所有縮進文本。現在我想刪除域名、Whois 伺服器和推薦 URL。我發現一個 sed 可以根據它的開頭刪除一行,但它似乎不起作用,因為我試圖將它與現有字元串而不是現有文件一起使用。我該如何修改它才能工作?
#!/bin/bash cyan='\033[0;34m' white='\033[1;37m' purple='\033[38;5;129m' NC='\033[0m' reg=$(whois "$1" | grep -Ei '^[[:blank:]]+.*:[[:blank:]]' | sed -e 's/^[[:space:]]*//') reg1=$(sed /^Domain/d $reg) printf "${cyan}Below is my best attempt at finding Registrar data:\n" printf "${white}$reg${NC}\n${purple}Made by Noah Yamamoto${NC}\n"
將 sed 與字元串一起使用
您已正確辨識問題:
$reg
是字元串,而不是文件。因此,您需要將字元串sed
作為標準輸入提供。代替:reg1=$(sed /^Domain/d $reg)
與(對於 bash):
reg1=$(sed /^Domain/d <<<"$reg")
或者,對於一般的 POSIX shell,使用:
reg1=$(echo "$reg" | sed /^Domain/d)
簡化:將 grep 和 sed 命令合併為一個命令
grep 和兩個 sed 命令可以組合成一個 sed 命令:
#!/bin/bash cyan='\033[0;34m' white='\033[1;37m' purple='\033[38;5;129m' NC='\033[0m' reg=$(whois yahoo.com | sed -En '/^[[:space:]]*Domain/d; /: / s/^[[:blank:]]+//p') printf "${cyan}Below is my best attempt at finding Registrar data:\n" printf "${white}$reg${NC}\n${purple}Made by Noah Yamamoto${NC}\n"