내 /etc/aliases 파일을 편집해야 하지만 100개가 넘는 호스트에 동일한 파일이 있으므로 스크립트를 작성하여 실행하고 싶습니다. 여러 개의 별칭 항목이 있는데 그 중 하나에서 다음과 같이 사용자 및 쉼표 구분 기호를 제거하고 싶습니다.
alias_name1: [email protected],[email protected],[email protected]
alias_name2: [email protected],[email protected],[email protected]
따라서 "를 제거하고 싶다면,[이메일 보호됨]"alias_name2" 대신 "alias_name1"에 있는 "지금 가지고 있는 유일한 예는 전체 파일에서 해당 문자열을 제거하거나 파일의 특정 줄에서 해당 문자열을 제거하는 것뿐이므로 어떻게 해야 합니까?" 작동하지 않습니다.
답변1
삭제하지만 삭제하지는 않음
",[email protected]"
"alias_name1"
"alias_name2"
sed
방법:
sed -E '/^alias_name1/ s/,name2@example\.com(,?)/\1/' /etc/aliases
첫 번째 캡처 그룹 트릭은 (...)
숫자가 줄 끝이나 중간에 있을 때도 작동합니다.,[email protected]
산출:
alias_name1: [email protected],[email protected]
alias_name2: [email protected],[email protected],[email protected]
답변2
sed
대체 명령 앞에 검색 매개변수를 사용할 수 있습니다 .
sed '/search_string/ s/remove_string//'
위 명령은 /search_string/
정규식과 일치하는 행에서만 작동하고 일치하는 내용을 빈 문자열로 바꿉니다 remove_string
.