bash从文件中的每个字符串中读取一个字符

时间:2013-05-22 07:55:46

标签: string bash variables

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

我有一个包含主机列表的文件:

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

和bash脚本中的变量,包含所有可能的主机:

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

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

  1. 读取我的第一个列表中所有字符串的第一个字符
  2. 检查所有字符是否相同
  3. 如果是,请将此字符添加到regexp
  4. else make regxep = $regexp"*"
  5. 使用包含所有主机的变量检查regexp
  6. 但是我在Bash中几乎没有经验,我不知道怎样才能在bash中只读出EACH字符串中的一个字符?

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

    first_character=${a: :1} 
    

    但这只是整个变量$ a的第一个特征。

2 个答案:

答案 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