
다음과 같은 파일이 있다고 가정해 보겠습니다 file
.
$ cat file
Hello
Welcome to
Unix
and Linux
파일의 마지막 줄 끝에 추가하고 싶습니다 . 이렇게 하면 echo " and Linux" >> file
새 줄이 추가됩니다. 하지만 난 마지막 줄을 원해Unix and Linux
그래서 이 문제를 해결하기 위해 파일 끝에 있는 개행 문자를 제거하고 싶습니다. 그러면 해당 줄에 텍스트를 추가할 수 있도록 파일 끝에 있는 개행 문자를 어떻게 제거합니까?
답변1
마지막 줄에 텍스트를 추가하려면 sed를 사용하는 것이 매우 쉽습니다. (줄 끝의 패턴 일치) 를 범위의 줄(즉, 마지막 줄)에만 $
추가하려는 텍스트로 바꾸세요.$
sed '$ s/$/ and Linux/' <file >file.new &&
mv file.new file
Linux에서는 다음과 같이 단축할 수 있습니다.
sed -i '$ s/$/ and Linux/' file
파일의 마지막 바이트를 제거하려는 경우 Linux(더 정확하게는 GNU coreutils)는 다음을 제공합니다.truncate
명령을 사용하면 이 작업이 매우 쉬워집니다.
truncate -s -1 file
POSIX 접근 방식 중 하나는 dd
.
length=$(wc -c <file)
dd if=/dev/null of=file obs="$((length-1))" seek=1
이 두 가지 모두 무조건 파일의 마지막 바이트를 자릅니다. 먼저 개행 문자인지 확인하고 싶을 수도 있습니다.
length=$(wc -c <file)
if [ "$length" -ne 0 ] && [ -z "$(tail -c -1 <file)" ]; then
# The file ends with a newline or null
dd if=/dev/null of=file obs="$((length-1))" seek=1
fi
답변2
답변3
그러나 다음을 사용하여 모든 줄에서 개행 문자를 제거할 수 있습니다 tr -d '\n'
.
$ echo -e "Hello"
Hello
$ echo -e "Hello" | tr -d '\n'
Hello$
다음과 같은 간단한 방법을 사용하여 파일 끝에 있는 개행 문자를 제거할 수 있습니다.
head -c -1 file
에서 man head
:
-c, --bytes=[-]K
print the first K bytes of each file; with the leading '-',
print all but the last K bytes of each file
truncate -s -1 file
에서 man truncate
:
-s, --size=SIZE
set or adjust the file size by SIZE
SIZE는 선택적 단위가 있는 정수입니다(예: 10M은 10*1024*1024입니다). 단위는 K, M, G, T, P, E, Z, Y(1024의 거듭제곱) 또는 KB, MB, ...(1000의 거듭제곱)입니다. SIZE 앞에는 다음 수정자 문자 중 하나가 앞에 붙을 수 있습니다. 확장하려면 "+", 감소하려면 "-", 둘 이상으로 반올림하려면 "/", 둘 이상으로 반올림하려면 "%" 하나.
답변4
perl -0pi -e "s/\R\z//g" file
"\r"(MAC), "\r\n"(Windows) 및 "\n"(Linux)에 적용됩니다. 파일 끝(모든 프롬프트)에서 반복되는 개행의 경우 다음을 수행할 수 있습니다.
perl -0pi -e "s/\R*\z//g" file