동일한 패턴을 따르는 다음 file.txt가 있고 IP를 추가하여 파일의 위치를 수정하고 싶습니다.
# gfhfhgfh
gfhfghgfhgfhgfh
MACs
# access
USER CONSOLA *,!10.249.247.3,!10.249.245.65
/bin/false
사용자 콘솔을 사용자로 포함하는 줄 끝에 IP를 추가하고 싶습니다.
USER CONSOLA *,!10.249.247.4,!10.249.245.65,!10.249.245.90,
현재는 문서 전체에 IP만 추가할 수 있지만 다음을 사용하여 특정 코드 줄에는 추가할 수 없습니다.
sed 's/\r\?$/,!10.10.11.1/' file.txt
답변1
줄의 시작 부분(앵커)에서 ^
일치시키고 $
줄 끝(앵커)의 새 텍스트로 바꿉니다.
$ sed '/^USER CONSOLA/ s/$/,!10.10.11.1/' file.txt
# gfhfhgfh
gfhfghgfhgfhgfh
MACs
# access
USER CONSOLA *,!10.249.247.3,!10.249.245.65,!10.10.11.1
/bin/false
파일에 보존하려는 Windows/DOS 스타일 CRLF 줄 끝이 있는 경우 위의 내용을 다음과 같이 수정하세요.
sed '/^USER CONSOLA/ s/\r$/,!10.10.11.1\r/' file.txt
만약 너라면아니요DOS 엔딩을 유지하려면 먼저 이를 제거 dos2unix
하거나 sed에서 이 작업을 수행하는 추가 명령을 추가하세요.
sed -e 's/\r$//' -e '/^USER CONSOLA/ s/$/,!10.10.11.1/' file.txt
답변2
동일한 효과를 얻으려면 다음 방법을 사용하십시오.
sed "/USER CONSOLA/s/.*/&\,\!10.249.245.90,/g" filename
산출
# gfhfhgfh
gfhfghgfhgfhgfh
MACs
# access
USER CONSOLA *,!10.249.247.3,!10.249.245.65,!10.249.245.90,
/bin/false