2017-12-10 2 views
0

내가 임시 파일에 섹션 1과 입력 파일에서 섹션 1을 대체 할Sed의 명령을 텍스트 파일에 섹션을 교체 (bash는)

inputfile 여기

section1 
a1 
section2 
a2 
section3 
a1 

temporaryfile의 contenst 있습니다 포함

section1 
a1,b2 

나의 현재의 시도는 다음과 같습니다

sed -i "/$section/,//{/$section/{p;r $temporaryfile};//p;d}" $Inputfile 

나는 다음과 같은 출력이보고 싶다 :

section1 
a1,b2 
section2 
a2 
section3 
a1 

그러나, 내 코드는 단순히 나에게 오류 메시지를 제공합니다

sed: -e expression #1, char 0: unmatched `{' 
sed: -e expression #1, char 0: unmatched `{' 

https://superuser.com/questions/440013/how-to-replace-part-of-a-text-file-between-markers-with-another-text-file

답변

1

가 나오지 함 S/오래된입니다/새, 그게 다야. 그냥 ... 단순, 내구성, 휴대 성, 효율성 등을위한 AWK를 사용하여 다른 용도 : sed

$ cat tst.awk 
NR%2 { name = $0; next } 
NR==FNR { val[name] = $0; next } 
{ print name ORS (name in val? val[name] : $0) } 

$ awk -f tst.awk temporaryfile Inputfile 
section1 
a1,b2 
section2 
a2 
section3 
a1 
1

많은 방언 "명령"개인으로 괄호가 필요합니다. 따라서 마지막 닫는 중괄호 앞에 세미콜론이 필요합니다.

또한 r 이후의 인수에는 인용 부호가 없으므로이를 명시 적으로 종료해야합니다. 줄 바꿈으로.

마지막으로 마이너 최적화로 no-op 빈 정규식 //은 어떤 목적으로도 사용되지 않습니다. 너는 그냥 내버려 둘 수있어.

sed "/$section/,//{/$section/{p;r $temporaryfile 
};p;d;}" 

일부 셸 초보자는 따옴표 안에 줄 바꿈을 사용할 수 있지만 실제로는 완전히 정상입니다.