![sed를 사용하여 줄을 다른 위치로 이동하는 방법은 무엇입니까?](https://linux55.com/image/140969/sed%EB%A5%BC%20%EC%82%AC%EC%9A%A9%ED%95%98%EC%97%AC%20%EC%A4%84%EC%9D%84%20%EB%8B%A4%EB%A5%B8%20%EC%9C%84%EC%B9%98%EB%A1%9C%20%EC%9D%B4%EB%8F%99%ED%95%98%EB%8A%94%20%EB%B0%A9%EB%B2%95%EC%9D%80%20%EB%AC%B4%EC%97%87%EC%9E%85%EB%8B%88%EA%B9%8C%3F.png)
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'