bash 스크립트를 통해 파일 편집


12

나는 bash 스크립팅의 초보자입니다 .Bash 스크립트를 작성하여 자동으로 Linux 상자에 물건을 설치하고 구성합니다.

내가 편집하고 싶다고 가정 해보십시오.

/etc/yum.repos.d/epel.repo

bash 스크립트에 의해

내가하고 싶은 것은 다음과 같습니다

  1. /etc/yum.repos.d/epel.repo 파일을여십시오
  2. [epel] 섹션 찾기
  3. epel 섹션에서 line enabled = 1 직후에 라인 우선 순위 = 10 추가

내가 추가 한 첫 번째 부분

yum install nano
nano /etc/yum.repos.d/epel.repo

내 질문은 nano를 사용하여 bash 스크립트로 2 및 3 부분을 수행하는 방법입니다 (가능한 경우 sed로 표시하십시오)

또한 어떤 시점에서 파일의 변수를 수정해야합니다.

  1. enable = 0 활성화 = 1
  2. 테스트 = "1"에서 테스트 = "0"
  3. 줄에 텍스트를 추가하십시오. 기능 = 기능 = "text1", "text2"
  4. 파일에 텍스트를 추가하고 저장하십시오 (나노 포함)

나는 서버 관리에 멍청한 친구를 위해 이것을 만들어야하지만 불행히도 내 시험과 같이 bash 스크립팅을 공부할 시간이 없습니다. 예제를 사용하여 스크립트를 작성합니다.


bash 스크립트의 대부분을 성공적으로 수행 한 모든 회신에 감사드립니다.

그러나 나는 또 다른 문제가있다 .sed를 사용하여 nginx.conf를 수정하고 싶다고 가정하자 worker_processes를 처리 할 것이다.
이제 sed를 사용하여 다음을 수행하고 싶다. 그 conf에서 첫 번째 발생 을 찾고 worker_processes텍스트를worker_processes 4;

여기 특별한 참고 사항 : 이것은 단지 예일뿐입니다. conf에 worker_processes 1이 포함되어있을 수 있습니다. . 이것은 어려운 부분입니다. 나는 찾아내는 나오지도 명령 할 FIRST 전체 일치하는 경우 단어의 worker_processes 단어가 발견 붙여 넣기되고, 텍스트의 삭제 라인 worker_processes 4;저장 파일이 다음을. 이것은 파일을 편집 할 때 가장 신뢰할 수있는 방법입니다 (conf를 깰 위험이 없습니다)

마지막 제안은 sed -i 's / enabled = 0 / enabled = 1 / g'/etc/yum.repos.d/remi.repo를 사용하여 remi의 [remi] 섹션에서 enabled = 0을 enabled = 1로 변경했습니다. .repo.하지만 해당 파일에서 모든 enabled = 0을 수정하여 서버를 손상시킬 수 있다고 생각합니다. 누군가 더 나은 코드를 제안 할 수 있습니까?


내가 확신하지 못하는 또 다른 것들 : PI는 Text Testing = "0"으로 파일을 편집하려고합니다 (예 : 따옴표가 있고 유지해야 함) Testing = "0"에서 Testing = "으로 수정해야합니다. 1 "(따옴표 포함)

또한 sed와 같은 파일 끝에 따옴표가있는 텍스트를 추가해야합니다. "Quanks Quanta"(따옴표 포함) PHP의 경우 메아리 따옴표와 함께 \를 넣으십시오.


conf에서 줄을 수정해야 할 또 다른 것은 대체 할 텍스트 전체가 무엇인지 기억하지 못합니다.

그것의 청취 = 무언가; , 듣고 듣기 위해 수정하고 싶습니다 = /tmp/php5-fpm.sock;

쿼터 최대 큰 엄지 손가락

멋진 지원 감사합니다

답변:


18
sed '/enabled=1/a\priority=10' /etc/yum.repos.d/epel.repo

-i원하는 경우 전체 편집 옵션 ( )을 지정하십시오 ( .bak확장자를 사용하여 백업을 먼저 작성).

sed -i.bak '/enabled=1/a\priority=10' /etc/yum.repos.d/epel.repo

이제 sed를 사용하여 다음을 수행하고 싶습니다 .1 해당 conf에서 worker_processes의 첫 번째 발생을 찾고 텍스트를 worker_processes 4로 바꿉니다.

sed '0,/worker_processes [0-9]*;/s//worker_processes 4;/' /etc/nginx/nginx.conf

마지막 제안은 내가 사용 sed -i 's/enabled=0/enabled=1/g' /etc/yum.repos.d/remi.repo변경 enabled=0enabled=1세 이하 [remi]섹션 remi.repo. 그러나 나는 enabled=0그 파일의 모든 것을 수정할 수 있다고 생각 하여 서버를 손상시킬 수 있습니다.

여기 당신을 위해 :

sed '/\[remi\]/,/enabled=0/ { s/enabled=0/enabled=1/ }' remi.repo

내가 확신하지 못하는 또 다른 것들 : PI는 Text Testing = "0"(예 : 따옴표가 있고 유지해야 함) 파일이있는 파일을 편집하려고합니다 Testing = "0"에서 Testing = " 1 "(따옴표 포함)

sed 's/Testing = "0"/Testing = "1"/g'

또한 sed와 같은 파일 끝에 따옴표가있는 텍스트를 추가해야합니다. "Quanks Quanta"(따옴표 포함) PHP의 경우 메아리 따옴표와 함께 \를 넣으십시오.

sed '$a"Werulz, you are welcome"\'

conf에서 줄을 수정해야 할 또 다른 것은 대체 할 텍스트 전체가 무엇인지 기억하지 못합니다.

그것의 청취 = 무언가; , 듣고 듣기 위해 수정하고 싶습니다 = /tmp/php5-fpm.sock;

sed 's/listen = .*/listen = \/tmp\/php5-fpm.sock;/'

'나오지도'/ 사용 가능 = 1 / A \ 우선 순위 = 10 '/etc/yum.repos.d/epel.repo'파일을 편집하고 changes.PLease의 확인 저장합니다
Werulz

@Werulz : epel.repo의 내용을 중요하지 않은 파일로 확인하거나 홈 디렉토리의 파일로 복사 한 후 루트 / 수퍼 유저 권한없이 실행하십시오.
Erik I

-i아닌 표준 옵션 에 대한 sed. ed그러나 sed와 매우 유사한 구문으로 파일을 편집하는 표준 호환 방법을 제공합니다.
kojiro

첫 번째 게시물을 업데이트하여 다른 제안을 요청했습니다. 지금까지 많은 지원을 해주셔서 감사합니다.
Werulz

나는 게시물을 다시 갱신했다. .. 많은 질문을해서 미안하다. 필요한 경우 스크립트를 공유합니다
Werulz

12

ptman이 말했듯이 Augeassed/ 사용을 피할 수 있습니다 awk:

$ augtool -s set /files/etc/yum.repos.d/epel.repo/epel/priority 10

의 우선 순위를 설정합니다 epel은 IF (10)에 저장소를 priority키가 이미 존재, 그것은 그렇지가 추가되며, 그 값을 설정합니다 priority섹션의 마지막 항목 이후에 항목을.

수정하려는 다른 값도 마찬가지입니다.

여러 값을 수정 augtool하려면 인터프리터로 도 사용할 수 있습니다 .

$ cat epel.augtool
#!/usr/bin/augtool -sf

# Make a variable
defvar epel /files/etc/yum.repos.d/epel.repo/epel

# Set values
set $epel/enable 1
set $epel/priority 10
set $epel/Testing 0
$ chmod +x epel.augtool
$ ./epel.augtool
Saved 1 file(s)

bash 스크립트에 유지하려면 명령을 augtool다음 으로 파이프하십시오 .

cat <<EOF | augtool
# Make a variable
defvar epel /files/etc/yum.repos.d/epel.repo/epel

# Set values
set $epel/enable 1
set $epel/priority 10
set $epel/Testing 0
save
EOF

man augtool더 많은 옵션을 참조하십시오 .

Augeas vs sed/ 를 사용하면 여러 가지 장점이 있습니다 awk.

  • Augeas에는 파일 구문 (이 경우 yum.repo구문) 에 대해 알고있는 구문 분석기가 있습니다. 정규식이 잘못되어도 파일 구문이 손상 될 위험이 없습니다.
  • Augeas yum.repo 파서는 yum.repo섹션에 대해 알고 있으므로 올바른 섹션을 편집하고 있음을 알고 있습니다.
  • Augeas는 dem 등입니다. 변경 사항이있는 경우에만 파일을 변경합니다. 모든 값이 이미 설정되어 있으면 파일을 수정하지 않습니다.
  • Augeas에는 Puppet 공급자가 있으므로 Puppet 인프라에서이를 자동화 할 수 있습니다.
  • 매개 변수가 아직 존재하지 않으면 Augeas가 해당 매개 변수를 작성합니다. 섹션이 아직 없으면 Augeas는 적절한 구문으로 섹션을 작성합니다.

답장을 보내 주셔서 감사합니다 ... 확실히 고려하겠습니다 .... 내 bash 스크립트와 함께 사용하는 방법의 예를 들어 줄 수 있습니까
Werulz

좋아, 내 편집을 참조하십시오.
ℝaphink

2

구성 파일을 프로그래밍 방식으로 수정하는 도구 인 Augeas 를 확인하고 싶을 수도 있습니다 . Puppet (구성 관리 시스템) 과 함께 사용하면 매우 강력 하지만 단독으로 사용할 수도 있습니다.


저게 뭐죠
Werulz

2
Augeas의 정의 / 동작에 대한 간단한 설명을 제공하고 예제를 추가하여이 답변의 품질을 향상시킬 수 있습니다.
ThatGraemeGuy

새로운 질문을 추가했습니다
Werulz
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.