比较字符串

比较字符串

我有 2 个 txt 文件,其中一个有别名列表,另一个是服务器名称。所以我想做的是从别名 txt 文件逐行循环,并在其中找到另一个 txt 文件(服务器名称)上的名称将在其他文件中回显或写入。例如:在这个alias.txt文件中,我们有这样的内容

alias server1='ssh [email protected]'
alias server2='ssh [email protected]'
alias server3='ssh [email protected]'
alias l='ls -CF'
alias la='ls -A'
alias ll='ls -alF'
alias ls='ls --color=auto'

在另一个文件中我们只有:

server1
server2
server3

现在,当我列出 alias.txt 时,我喜欢将其他 txt 文件与别名进行比较,并只给出别名值。如果他发现 server1 写入文件或 echo ssh[电子邮件受保护]...

要点是我有很多类似于 server1 ( ssh 连接)的别名,但我喜欢一些服务器,而不是全部,我只需要特定的服务器(在本例中是我在 server.txt 文件中拥有的服务器)

有什么提示吗? :)

答案1

这对你有用吗?:

$ grep -F -f serverlist.txt alias.txt 
alias server1='ssh [email protected]'
alias server2='ssh [email protected]'
alias server3='ssh [email protected]'

它使用 as 模式的线条serverlist.txt来匹配以显示线条形式alias.txt。根据服务器的名称,可能需要稍微复杂一些才能不给出错误的匹配,例如服务器的名称只是server.

首先将普通服务器名称转换为仅与别名定义左侧匹配的模式会更安全:

$ sed "s/\(.*\)/^alias \1='/" serverlist.txt                      
^alias server1='
^alias server2='
^alias server3='

我们可以使用-f -从 stdin 读取模式,就像我们之前直接从文件中所做的那样:

$ sed "s/\(.*\)/^alias \1='/" serverlist.txt | grep -f - alias.txt
alias server1='ssh [email protected]'
alias server2='ssh [email protected]'
alias server3='ssh [email protected]'

相关内容