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]'