Regex 用sed隔离字符串的一部分

Regex 用sed隔离字符串的一部分,regex,bash,sed,Regex,Bash,Sed,我目前正在用Bash制作一个脚本,让我的工作生活稍微轻松一点。 我正在尝试将主机名从我的nslookup调用中分离出来,但我遇到了一些问题 nslookup的输出是1.0.0.10.in-addr.arpa name=nuc3.homenet.no,我试图通过捕获nuc3并用捕获的组替换整个字符串,只匹配并保存字符串的nuc3部分,并将其保存在变量中 NSLOOKUP=$(nslookup 10.0.0.1) NUC=$(echo ${NSLOOKUP} | sed -E 's/.*?(nuc

我目前正在用Bash制作一个脚本,让我的工作生活稍微轻松一点。 我正在尝试将主机名从我的
nslookup
调用中分离出来,但我遇到了一些问题

nslookup
的输出是
1.0.0.10.in-addr.arpa name=nuc3.homenet.no
,我试图通过捕获
nuc3
并用捕获的组替换整个字符串,只匹配并保存字符串的
nuc3
部分,并将其保存在变量中

NSLOOKUP=$(nslookup 10.0.0.1) 
NUC=$(echo ${NSLOOKUP} | sed -E 's/.*?(nuc\d+).*/\1/'
\d+
主要是因为有多台机器以相同的方式命名,编号范围为1-10

sed的输出默认为打印原始字符串,因此我想大概是有什么事情发生了。我以前成功地使用了相同的方法来隔离字符串,没有任何问题

为什么不是这个

echo '1.0.0.10.in-addr.arpa name = nuc3.homenet.no' | awk -F'=' '{print $2}' | tr -d -c '[a-zA-Z0-9.\n]'
或者也包括:

echo '1.0.0.10.in-addr.arpa name = nuc3.homenet.no' | grep -o -P  '[a-zA-Z]+[0-9]+[.][a-zA-Z]+[.][a-zA-Z]+'

sed
不支持
\d
。只需使用
[0-9]
并在
nuc
之前匹配空格,以避免错误匹配:

echo '1.0.0.10.in-addr.arpa name = nuc3.homenet.no' | sed -E 's/.* (nuc[0-9]+).*/\1/'


这就解释了我的问题。工作很有魅力,谢谢你!
nuc3