文字列比較

文字列比較

2つのtxtファイルがあり、1つはエイリアスリスト、もう1つはサーバー名です。だから私が望むのは、エイリアスtxtファイルで1行ずつ繰り返し、その中で別のファイルにエコーまたは書き込まれる別の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を見つけたら、ファイルに書き込むか、SSHをエコーし​​ます。[Eメール保護]...

要点は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]'

これは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]'

おすすめ記事