sedを使用して文字列内の1行を傍受するには?

sedを使用して文字列内の1行を傍受するには?

私はドメインレジストラ情報を表示するスクリプトを書いていますが、すでに持っているものからいくつかの行を切り取ろうとしています。今、ドメイン名、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"

ベストアンサー1

文字列でsedを使用する

問題を正しく識別しました。問題$regはファイルではなく文字列です。したがって、文字列をsed標準入力として提供する必要があります。変える:

reg1=$(sed /^Domain/d $reg)

vs(bashの場合):

reg1=$(sed /^Domain/d <<<"$reg")

または、通常のPOSIXシェルの場合は、次を使用します。

reg1=$(echo "$reg" | sed /^Domain/d)

簡略化:grepコマンドとsedコマンドを1つのコマンドに結合

grepと2つのsedコマンドを1つの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"

おすすめ記事