Regex 用sed隔离字符串的一部分
我目前正在用Bash制作一个脚本,让我的工作生活稍微轻松一点。 我正在尝试将主机名从我的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
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