2017-01-13 1 views
1

키워드로 시작하는 줄이 여러 개인 파일이 있습니다. 나는 그것들 중 하나만 수정하기를 원하며, 그것들을 구별하기 쉽습니다. 나는 [dbinfo] 섹션 아래에있는 것을 원합니다. 도메인 이름은 정적이므로 변경할 필요가 없습니다.awk를 사용하여 시작하지만 줄도 포함하는 줄을 찾습니다.

awk -F '=' '$1 ~ /^dbhost/ {print $NF};' myfile.txt 

MYFILE.TXT

[ual] 
path=/web/ 
dbhost=ez098sf 

[dbinfo] 
dbhost=ec0001.us-east-1.localdomain 
dbname=ez098sf_default 
dbpass=XXXXXX 
+1

때문에, 원하는 출력은 무엇인가? – NinjaGaiden

+0

결국 매개 변수의 값을 수정하려고합니다. 그래서 나는'[ual]'에서'dbhost' 값을 만지기를 원하지 않습니다, 나는 그것을 [dbinfo] 아래에 원합니다. – luckytaxi

+0

제목이 질문과 일치하지 않는 것 같습니다. 그 줄은 문자열을 포함하지 않고, 다른 문자열로 시작하는 블록 안에 있습니다. – Barmar

답변

2

당신은 [dbinfo]의 존재 여부를 먼저 확인이 awk 명령을 사용할 수 있습니다 섹션을 수정 한 후 dbhost 매개 변수를 수정하십시오.

awk -v h='newhost' 'BEGIN{FS=OFS="="} 
     $0 == "[dbinfo]" {sec=1} sec && $1 == "dbhost"{$2 = h; sec=0} 1' file 

[ual] 
path=/web/ 
dbhost=ez098sf 

[dbinfo] 
dbhost=newhost 
dbname=ez098sf_default 
dbpass=XXXXXX 
1

현재 상태 머신의 조금을 이용하려면 :

awk -F '=' ' 
    $0 ~ /^\[.*\]/ {in_db_info=($0=="[dbinfo]"} 
    $0 ~ /^dbhost/{if (in_db_info) print $2;}' myfile.txt 
1

또한이 나오지도 함께 수행 할 수 있습니다

sed '/\[dbinfo\]/,/\[/s/\(^dbhost=\).*/\1domain.com/' myfile.txt 
관련 문제