문자열 비교

문자열 비교

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을 찾으면 파일에 쓰거나 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]'

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

관련 정보