sed를 사용하여 줄을 다른 위치로 이동하는 방법은 무엇입니까?

sed를 사용하여 줄을 다른 위치로 이동하는 방법은 무엇입니까?

sed를 사용하여 줄을 다른 위치로 이동하는 방법은 무엇입니까?

다음과 같은 파일을 상상해 보세요.

ligne
ligne
toto
tutu
titi

얻고 싶어하다:

ligne
toto
tutu
titi
ligne 

알려진 패턴은 "tutu"이고 대상 줄 번호는 "2"이며 이동하려는 텍스트 블록의 시작 줄 번호도 있습니다.

그래서 이미 알고 있는 특정 위치(2번째 행)에 복사하고 싶습니다(처음 1행과 연속 1행).

나는 시도했다:

sed '2,5{ H ;d ; } ;  2{ p ; x ; }' file

그러나 "붙여넣기" 부분은 작동하지 않으므로 다음과 같이 표시됩니다.

ligne

나는 숫자 값 행에 버퍼를 붙여넣는 방법을 정말로 이해하지 못합니다.

답변1

좋아요, 쓰여진 대로요:

$ sed -n '1p; 2h; 3,/tutu/N; /tutu/ N; ${G; p;}' file
ligne
toto
tutu
titi
ligne

답변2

sed가 아니라 그 조상편집하다:

  • 다음에 의해 주어진 범위와 일치합니다:
    • 검색 tutu후 행 빼기
    • 검색 tutu후 행 추가
  • m블록을 2행으로 이동합니다(2행 뒤 1).
  • 저장 및 종료 ( w, q)

다음으로 이어진다:

ed -s file <<< $'/tutu/-1,/tutu/+1m1\nw\nq'

관련 정보