3

我没有那么容易的任务,我需要有用的建议。

我有一个文件,其中包含主机列表:

host1.example.domain.com
host2.example.domain.com
host3.example.domain.com

以及 bash 脚本中的一个变量,包含所有可能的主机:

hostblabla.newdomain.org
...
host3.example.domain.com

我需要的是制作简单的正则表达式,它只计算我的第一个列表中存在的主机。我是这样想的:

  1. 读取我的第一个列表中所有字符串的第一个字符
  2. 检查所有字符是否相同
  3. 如果是,则将此字符添加到正则表达式
  4. 否则做regxep = $regexp"*"
  5. 使用包含所有主机的变量检查正则表达式

但是我对 Bash 的经验很少,我不知道如何从 bash 中的每个字符串中只读取一个字符?

我知道我可以做到以下几点:

first_character=${a: :1} 

但这只是整个变量 $a 的第一个字符。

4

2 回答 2

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

它将输出两个列表中都存在的主机的排序列表。

于 2013-05-22T08:07:11.747 回答
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
于 2013-05-22T08:10:45.883 回答