다음 두 sed
명령을 실행 중 입니다. 첫 번째 문자는 원하는 곳에 개행 문자를 추가하고, 두 번째 문자는 원하는 곳에 개행 문자를 추가하고, 파일의 끝에 이전 문자가 없었던 추가 문자를 추가합니다.
sed -e 's|\<LIST_G_STATEMENT>|&\
|g' ${XMLDIR}/statement_tmp_1.xml > ${XMLDIR}/statement_tmp_2.xml
sed -e 's|\</LIST_G_STATEMENT>|&\
|g' ${XMLDIR}/statement_tmp_2.xml > ${XMLDIR}/statement_tmp_3.xml
od -c
세 파일 모두에서 사용 하면 다음과 같은 결과가 출력됩니다.
statement_tmp_1.xml ( \n
파일 끝에 없음 )
1314700 T A T E M E N T > < / L I S T _
1314720 G _ S T A T E M E N T > < / G _
1314740 S E T U P > < / L I S T _ G _ S
1314760 E T U P > < / A R X S G P O >
1314777
statement_tmp_2.xml ( \n
파일 끝에 없음 )
1314700 S T A T E M E N T > < / L I S T
1314720 _ G _ S T A T E M E N T > < / G
1314740 _ S E T U P > < / L I S T _ G _
1314760 S E T U P > < / A R X S G P O >
1315000
statement_tmp_3.xml ( \n
파일 끝-어디에서 왔습니까?)
1314700 S T A T E M E N T > < / L I S T
1314720 _ G _ S T A T E M E N T > \n < /
1314740 G _ S E T U P > < / L I S T _ G
1314760 _ S E T U P > < / A R X S G P O
1315000 > \n
1315002
AIX 5.3을 실행 중입니다.
기본적으로 여분의 추가를 중단 \n
하거나 제거하는 방법을 찾고 싶습니다 .
답변
AIX sed
에서 누락 된 줄 바꿈 문자를 추가 한 것은 운이 좋을 것입니다 .
줄 바꿈 문자로 끝나지 않은 비어 있지 않은 파일은 텍스트 파일이 아니고 텍스트 파일은 POSIX 정의에 따라 최소한 텍스트 파일의 POSIX 정의에 따라 행을 포함하고 행은 long) 줄 바꿈 문자로 끝나는 일련의 문자이므로 텍스트 유틸리티의 동작 sed
은 지정되지 않으며 실제로 구현마다 다릅니다.
일부 sed
구현은 마지막 행 다음에 그 가짜 문자를 무시했을 것입니다.
AFAIK, xml
파일은 텍스트 파일을 의미하므로 sed
수정되었습니다.
해당 파일이 개행 문자로 끝나지 않아야하는 경우 perl
텍스트가 아닌 데이터를 처리 할 수있는 도구 나 다른 도구를 사용할 수 있습니다.
perl -pe 's|<LIST_G_STATEMENT>|$&\n|g'
답변
다음을 사용하여 파일에서 최종 개행을 제거하는 방법은 다음과 같습니다 dd
.
printf "" | dd of='/path/to/file' seek=<filesize_in_bytes - 1> bs=1 count=1
파일이 개행으로 끝나는 지 테스트하려면 다음을 사용할 수 있습니다.
tail -c 1 /path/to/file | tr -dc '\n' | wc -c
그리고 파일 크기를 바이트 단위로 얻으려면 다음을 사용하십시오.
wc -c < /path/to/file
답변
이에 따라 AIX 매뉴얼 IBM의는 tail
않습니다 -r
EVERSE – 정말 멋진 보이는한다. 파일이 20KB 미만이면 다음이 작동합니다.
tail -r <file | dd bs=1 skip=1 | tail -r >file.new