Bash

如何使用 sed 從字元串中剪斷一行?

  • May 28, 2016

我正在編寫一個腳本來顯示域註冊商資訊,我正在嘗試從我已經擁有的內容中剪掉幾行我目前擁有它從 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"

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