파일의 마지막 n줄을 어떻게 편집하나요?

파일의 마지막 n줄을 어떻게 편집하나요?

파일의 마지막 n줄을 편집할 수 있는 명령이 있습니까? 줄 수가 다른 여러 파일이 있습니다. 하지만 각 파일의 마지막 n 줄을 수정하고 싶습니다. 목표는 마지막 n 줄의 쉼표를 세미콜론으로 바꾸는 것입니다. 하지만 마지막 n 줄에만 해당됩니다.

어떤 줄도 삭제하고 싶지 않고 각 파일의 마지막 n 줄에서 각 쉼표를 세미콜론으로 바꾸고 싶습니다.

sed 명령을 사용하면 마지막 줄을 이 명령으로 바꿀 수 있습니다. 여기에 설명된 대로: 파일의 마지막 텍스트 줄을 삭제하는 방법은 무엇입니까?

하지만 이렇게 하면 마지막 n줄이 아닌 마지막 줄만 수정할 수 있습니다.

답변1

마지막 n 줄의 쉼표를 세미콜론으로 바꾸려면 다음을 수행합니다 ed.

n=3
ed -s input <<< '$-'$((n-1))$',$s/,/;/g\nwq'

분리하세요:

  • ed -s= ed를 자동으로 실행합니다(마지막에 기록된 바이트를 보고하지 않음).
  • '$-'= 파일 끝에서 빼기 ( $)...
  • $((n-1))= n-1개 행...
  • ( $' ... '= 쉘로부터 보호하기 위해 명령의 나머지 부분을 인용합니다)
  • ,$s/,/;/g= ... 파일 끝까지( ,$)까지 모든 쉼표를 검색하여 세미콜론으로 바꿉니다.
  • \nwq= 이전 명령을 종료한 다음 저장하고 종료합니다.

마지막 n 줄의 쉼표를 세미콜론으로 바꾸려면 다음을 수행합니다 sed.

n=3
sed -i "$(( $(wc -l < input) - n + 1)),\$s/,/;/g" input

분할:

  • -i=파일을 "제자리에서" 편집하세요
  • $(( ... ))= 수학을 좀 해보세요:
  • $( wc -l < input)= 파일의 줄 수를 가져옵니다.
  • -n + 1= n-1 줄 뒤로 이동
  • ,\$= 라인 n-1부터 파일 끝까지:
  • s/,/;/g= 쉼표를 세미콜론으로 바꾸세요.

답변2

tac및 다음 을 사용하여 sedfile.txt의 마지막 50줄에 있는 모든 쉼표를 세미콜론으로 바꾸는 솔루션 :

tac file.txt | sed '1,50s/,/;/g' | tac

답변3

GNU head및 Bourne과 유사한 쉘 사용:

n=20
{ head -n -"$n"; tr , ';'; } < file 1<> file

파일 자체를 덮어쓰고 있습니다. 바이트 단위로 음역하는 경우에는 괜찮지만 1<> file수정으로 인해 파일 크기가 변경되는 경우에는 반드시 그런 것은 아닙니다(예를 들어 로 바꿔야 하는 경우).> other-file && mv other-file file

답변4

tailsed에 사용 하고 파이프:

tail -n 20 file | sed 's/,/;/g'

이는 파일의 마지막 20줄에 적용됩니다. 파일에 직접 액세스하려면 다음을 사용하세요.

tail -n 20 file | sed -i 's/,/;/g'

관련 정보