我没有那么容易的任务,我需要有用的建议。
我有一个包含主机列表的文件:
host1.example.domain.com
host2.example.domain.com
host3.example.domain.com
和bash脚本中的变量,包含所有可能的主机:
hostblabla.newdomain.org
...
host3.example.domain.com
我需要的是制作简单的正则表达式,它只匹配我的第一个列表中存在的主机。 我这样想:
regxep = $regexp"*"
但是我在Bash中几乎没有经验,我不知道怎样才能在bash中只读出EACH字符串中的一个字符?
我知道我可以做到以下几点:
first_character=${a: :1}
但这只是整个变量$ a的第一个特征。
答案 0 :(得分:3)
所以你需要一个两个列表的交叉点,是吗?
将两个列表以唯一的行排序到文件中:
sort -u original_list_of_hosts.txt > sorted_list_of_hosts.txt
echo "$POSSIBLE_HOSTS" | sort -u > possible_hosts.txt
然后使用join
命令获取两个文件的共同部分:
join sorted_list_of_hosts.txt possible_hosts.txt
它将输出存在于两个列表中的主机的排序列表。
答案 1 :(得分:0)
使用grep:
#!/bin/bash
s[0]="hostblabla.newdomain.org"
s[1]="host3.example.domain.com"
regex=""
for h in ${s[@]}; do
regex="$regex -e $h "
done
grep $regex input