如何使用 sed 从字符串中截取一行?

如何使用 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"

答案1

将 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"

相关内容