여러 파일 이름을 전달할 때 sed 출력에 빈 줄을 인쇄합니다.

여러 파일 이름을 전달할 때 sed 출력에 빈 줄을 인쇄합니다.

ldapaddLDAP 디렉토리에 새 항목을 추가하기 위해 제공된 다양한 파일에서 일부 자리 표시자 대체를 수행하고 있습니다 .

sed \
    -e 's/%%FOO%%/whatever/g' \
    -e 's/%%BAR%%/other thing/g \
    file1.ldif.template \
    file2.ldif.template \
    | ldapadd -x -D 'cn=admin,dc=example,dc=com' -W

내가 가진 문제는 끝에 빈 줄이 없으면 의 file1.ldif.template첫 번째 레코드가 의 file2마지막 레코드에 연결되고 파일 file1에서 ldif다른 레코드는 최소한 1개의 줄 바꿈으로 구분되어야 한다는 것입니다.

물론 끝에 빈 줄을 추가할 수 있지만 file1다른 개발자(또는 편집자)가 후행 줄 바꿈을 제거하면 나중에 쉽게 실패할 수 있습니다.

요약하자면. 현재(간체) sed 출력:

dn: cn=record1_file1,dc=example,dc=com
cn: record1_file1

dn: cn=record2_file1,dc=example,dc=com
cn: record2_file1
dn: cn=record1_file2,dc=example,dc=com
cn: record1_file2

dn: cn=record2_file2,dc=example,dc=com
cn: record2_file2

원하는(단순화된) 출력:

dn: cn=record1_file1,dc=example,dc=com
cn: record1_file1

dn: cn=record2_file1,dc=example,dc=com
cn: record2_file1

dn: cn=record1_file2,dc=example,dc=com
cn: record1_file2

dn: cn=record2_file2,dc=example,dc=com
cn: record2_file2

저는 GNU sed를 사용하여 Linux(fedora 21)에서 작업하고 있습니다. 이식성은 문제가 되지 않습니다(그러나 저는 GNU 솔루션보다 이식 가능한 솔루션을 선호합니다).

답변1

GNU sed 확장을 사용하면 각 파일 이름 뒤에 빈 줄 바꿈을 추가할 수 있습니다(줄 주소는 모든 입력을 's 및 변수 -s (--separate)와 유사하게 하나의 더 긴 스트림으로 처리하는 대신 각 파일 이름을 참조함 ).awkFNRNR

sed \
    -s \
    -e '$a\\' \
    -e 's/%%FOO%%/whatever/g' \
    -e 's/%%BAR%%/other thing/g \
    file1.ldif.template \
    file2.ldif.template \
    | ldapadd -x -D 'cn=admin,dc=example,dc=com' -W

따라서 -swith를 사용하면 모든 입력 파일 끝에 개행 문자가 -e '$a\\'삽입됩니다 .sed

답변2

간단하고 이식 가능한 방법은 file 매개변수에 빈 줄이 포함된 파일을 삽입하는 것입니다.

# create file with one empty line
echo > emptyline.txt

# calling sed:
sed -e 's/%%FOO%%/whatever/g' \
    -e 's/%%BAR%%/other thing/g \
    file1.ldif.template \
    emptyline.txt \
    file2.ldif.template \ 
    | ...

일부 쉘은 이것을 지원합니다:

sed -e 's/%%FOO%%/whatever/g' \
    -e 's/%%BAR%%/other thing/g \
    file1.ldif.template \
    <(echo) \
    file2.ldif.template \ 
    | ...

관련 정보