conf 파일에서 몇 줄을 변경하고 싶습니다. 예를 들어 파일에는 다음 내용이 포함됩니다.
local all all md5
#host all all 127.0.0.1/32 md5
#host all all ::1/128 trust
#host all all 0.0.0.0/0 md5
이제 이 줄을 "읽고" 다음으로 바꾸고 싶습니다.
local all all trust
host all all 127.0.0.1/32 trust
host all all ::1/128 trust
host all all 0.0.0.0/0 md5
그래서,
1) 해당 줄의 주석 처리를 해제합니다.
2) 가지고 있는 값(예: md5)을 읽고 다른 경우(예: 신뢰로) 바꿉니다.
md5에서 신뢰로 바꾸라고 말할 때 파일의 모든 md5 단어를 의미하는 것이 아니라 local all all md5
변경해야 하는 특정 줄만 원합니다.
그런 일이 가능합니까?
줄을 읽는 명령이 있다는 것을 알고 있지만 read
비교하고 바꾸는 방법을 모르겠습니다.
답변1
나는 이것이 당신이 찾고있는 것을 성취 할 것이라고 생각합니다.
#!/bin/bash
# Remove # signs from the beginning of lines.
sed -i -e 's/^#//' file.txt
# Replace md5 with trust on the specified lines.
sed -i -e '/local *all *all/{s/md5/trust/}' file.txt
sed가 단일 명령에서 여러 표현식을 지원하는 경우 이를 하나의 명령으로 최적화할 수도 있습니다.
sed -i -e '/local *all *all/{s/md5/trust/}' -e 's/^#//' file.txt
무슨 일이 일어나고 있는지 빠르게 분석하세요.
-i
그 자리에서 파일 편집
-e
실행할 명령에 스크립트를 추가합니다.
's/^#//'
스크립트에서 첫 번째 패턴을 s
바꾸라고 지시하는 ^#
것이 우리가 검색하는 패턴이고 우리는 그것을 무엇이든 바꾸게 됩니다(따라서 삭제합니다).
이것이 여러분만의 sed 표현식을 만드는 데 도움이 되기를 바랍니다.