파일의 마지막 줄 끝에 작은따옴표를 추가하는 방법

파일의 마지막 줄 끝에 작은따옴표를 추가하는 방법

나는 '파일의 마지막 표시되는(이스케이프되지 않은 문자) 줄에 작은따옴표를 추가하고 이를 파일에 다시 저장할 수 있는 Perl이 아닌 솔루션을 원합니다.

고양이 예시.txt

var1: 'funn'
var2: 'weee'
var3: 'youuuu

   

예상 출력

고양이 예시.txt

var1: 'funn'
var2: 'weee'
var3: 'youuuu'

마지막 줄 인쇄 방법 awk과 각 줄 끝에 문자를 추가하는 방법을 알고 있지만 마지막 줄에 작은 따옴표를 추가하고 파일을 업데이트하는 것만으로는 파일을 업데이트할 수 없습니다.

답변1

sed표현식은 $s/$/'/입력의 마지막 줄 끝에 작은따옴표를 추가합니다. 첫 번째는 $마지막 줄의 "주소"입니다. s마지막 줄이 발견되면 지정된 대체 명령이 트리거됩니다 . 이 명령은 $정규식에서 일치하는 줄 끝을 작은따옴표로 바꿉니다.

줄 끝에 작은 따옴표가 없는 경우에만 바꾸기를 수행하시겠습니까? 그러면 를 사용하십시오 $s/[^']$/&'/. 이렇게 하면 마지막 줄의 마지막 문자가 그 자체로 바뀌고 그 뒤에 작은 따옴표가 옵니다. 문자는 작은따옴표가 아닙니다. 물론 이렇게 하려면 해당 줄에 이미 하나 이상의 문자가 있어야 합니다.

셸에서는 sed큰따옴표 안에 이러한 표현식을 사용할 수 있지만 셸에서 두 개의 달러 기호를 이스케이프해야 합니다.

sed "\$s/\$/'/" file
sed "\$s/[^']\$/&'/" file

지원 하는 경우 sed이를 사용하여 -i파일을 내부 편집할 수 있습니다.

파일의 비어 있지 않은 마지막 줄에만 적용하고 뒤에 오는 공백 전용 줄을 제거하려면 먼저 파일 끝에서 빈 줄을 제거합니다. 한 가지 방법은 다음 파이프라인을 사용하는 것입니다.

tac file | sed '1,/[[:graph:]]/ { /[[:graph:]]/!d; }' | tac

이는 GNU를 사용하여 파일의 줄을 뒤집고 , 비어 있지 않은 첫 번째 줄 앞의 모든 줄을 제거한 다음("공백이 아닌"은 그래픽 문자가 있다는 의미이므로 대신 tac사용할 수 있음 ) 줄을 다시 바꿉니다.[^[:space:]][[:graph:]]

파이프라인 출력의 마지막 줄을 수정합니다.

tac file | sed '1,/[[:graph:]]/ { /[[:graph:]]/!d; }' | tac |
sed "\$s/\$/'/" >file.new

또는 다음 두 sed호출을 결합합니다.

tac file | sed "1,/[[:graph:]]/ { /[[:graph:]]/\!d; s/\$/'/; }" | tac >file.new

( !일부 쉘은 이스케이프하지 않으면 히스토리 확장을 시도할 수 있습니다.)

...그런 다음 다음 을 file사용하여 file.new교체하세요 mv.

관련 정보