Bash에서 해당 줄의 모든 내용을 반환하여 줄을 비워 둡니다.

Bash에서 해당 줄의 모든 내용을 반환하여 줄을 비워 둡니다.

텍스트 파일을 변경하고 싶습니다. 22행에 텍스트가 있고 22행을 비워두고 22행의 텍스트를 23행으로 이동하고 싶다고 가정해 보겠습니다. 이를 설명하기 위해 ( )로 바꾸고 싶습니다 printf 'Some %d text\n' {1..23}.

Some 1 text
Some 2 text
Some 3 text
Some 4 text
Some 5 text
Some 6 text
Some 7 text
Some 8 text
Some 9 text
Some 10 text
Some 11 text
Some 12 text
Some 13 text
Some 14 text
Some 15 text
Some 16 text
Some 17 text
Some 18 text
Some 19 text
Some 20 text
Some 21 text
Some 22 text
Some 23 text

다음을 입력하세요:

Some 1 text
Some 2 text
Some 3 text
Some 4 text
Some 5 text
Some 6 text
Some 7 text
Some 8 text
Some 9 text
Some 10 text
Some 11 text
Some 12 text
Some 13 text
Some 14 text
Some 15 text
Some 16 text
Some 17 text
Some 18 text
Some 19 text
Some 20 text
Some 21 text
Some 22 text

Some 23 text

어떻게 해야 합니까?

답변1

sed -i '21 a\
' yourfile

그림 21은 라인 1 뒤에 빈 라인을 추가하는 데 사용된 라인 1의 이전 라인 번호의 완전한 예입니다.

francois@zaphod:~$ cat toto
Some text
Some more text
Some other text
francois@zaphod:~$ sed -i '1 a\
' toto
francois@zaphod:~$ cat toto
Some text

Some more text
Some other text
francois@zaphod:~$

그러면 파일 길이는 4줄입니다(빈 줄 포함).

답변2

표준 편집기를 사용하여 ed해당 명령을 입력에 인쇄하면 됩니다.

printf '%s\n' 22a '' . w q | ed -s file
  1. 22번째 줄 뒤에 추가
  2. (빈 줄)
  3. .-- 추가 입력 종료
  4. 디스크에 파일 쓰기
  5. 편집 종료

23i또는 대신 23행 앞에 삽입하세요 22a.

답변3

sed와 함께 다음을 사용할 수 있습니다.

$ sed -e '22{x;G;}' file

그러면 22행 앞에 빈 행(개행 문자)이 배치됩니다. 22행 이전의 내용은 아래로 푸시됩니다. 그러나 이렇게 하면 예약된 공간의 내용이 수정됩니다. 보존하려면 다음 변형을 사용하십시오.

$ sed -e '22{x;p;x;}' file 

또는 awk/perl 유틸리티를 사용하십시오:

$ awk 'NR==22{$0 = RS $0}1' file

$ perl -pe '22..22&&s/^/\n/' file

관련 정보