ldapadd
LDAP 디렉토리에 새 항목을 추가하기 위해 제공된 다양한 파일에서 일부 자리 표시자 대체를 수행하고 있습니다 .
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)
와 유사하게 하나의 더 긴 스트림으로 처리하는 대신 각 파일 이름을 참조함 ).awk
FNR
NR
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
따라서 -s
with를 사용하면 모든 입력 파일 끝에 개행 문자가 -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 \
| ...