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'