sed 명령을 사용할 때 이상한 동작이 발생합니다(이 경우에는 awk가 아니라 sed여야 합니다). 누군가 내가 뭘 잘못하고 있는지 설명할 수 있기를 바라면서 두 가지 질문이 있습니다.
다음 줄을 사용하여 /etc/sudoers에 주석과 두 개의 명령을 추가하고 싶습니다.
sed -i -e '$a\# Provide apache user permissions to run the ban_ip.sh script as part of mod_evasive\n\apache ALL=NOPASSWD: /usr/local/bin/scripts-tecmint/ban_ip.sh\n\Defaults:apache !requiretty' /etc/sudoers
여기서 이상한 일이 일어나고 있습니다.
- 첫 번째 줄(주석)은 빈 줄을 만들지 않고 파일 끝에 직접 추가됩니다(수정 사항을 연결하려는 "디자인 항목"만 해당).
- 생성된 두 번째 행은 이제 다음에서 시작됩니다.^그파체바꾸다아파치
질문:
1. sed one-liner를 사용하여 파일 끝에 빈 줄을 추가한 다음 해당 빈 줄 뒤에 텍스트를 삽입하려면 어떻게 해야 합니까?
2. 내가 원하는 텍스트를 추가하기 위해 sed를 얻으려면 한 줄에서 무엇을 수정해야 합니까? (두 번째 줄은 다음으로 시작합니다.아파치설마^그파체
귀하의 의견에 진심으로 감사드립니다.
답변1
왜냐하면 이 \a
역할은 Ctrl+G- 나중에 이 역할에서 벗어날 필요가 없기 때문입니다.\n
유지 관리를 위해 약간 한 줄로 만들고 실제 줄 바꿈을 사용하여 명령을 계속하는 것이 좋습니다 a
. 또한 원하는 빈 줄도 활성화됩니다.
sed -i -e '$a\
\
# Provide apache user permissions to run the ban_ip.sh script as part of mod_evasive\
apache ALL=NOPASSWD: /usr/local/bin/scripts-tecmint/ban_ip.sh\
Defaults:apache !requiretty' /etc/sudoers
답변2
sed를 사용하는 특별한 이유가 있나요? 왜 안 돼...
echo -e '\n# Provide apache user permissions to run the ban_ip.sh script as part of mod_evasive\napache ALL=NOPASSWD: /usr/local/bin/scripts-tecmint/ban_ip.sh\nDefaults:apache !requiretty' >>/etc/sudoers
"apache"의 첫 번째 "a"는 앞의 "\"로 이스케이프되어 "^Gpache"가 됩니다. "\n" 뒤의 "\"를 제거하면 해당 특정 사례를 해결할 수 있습니다. 새 줄에서 주석을 시작하려면 "$a\" 뒤에 "\n"을 삽입하면 됩니다. 아마도...
sed -i -e '$a\ \n# Provide apache user permissions to run the ban_ip.sh script as part of mod_evasive\napache ALL=NOPASSWD: /usr/local/bin/scripts-tecmint/ban_ip.sh\nDefaults:apache !requiretty' /etc/sudoers
전체 공개: 저는 이러한 솔루션을 테스트하지 않았습니다.