![여러 텍스트 파일에서 줄을 이동하는 방법은 무엇입니까? [복사]](https://linux55.com/image/140604/%EC%97%AC%EB%9F%AC%20%ED%85%8D%EC%8A%A4%ED%8A%B8%20%ED%8C%8C%EC%9D%BC%EC%97%90%EC%84%9C%20%EC%A4%84%EC%9D%84%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%20%5B%EB%B3%B5%EC%82%AC%5D.png)
안녕하세요, 다음과 같은 파일이 있다고 가정해 보겠습니다.
x
x
x
A
B
C
1
2
3
D
E
F
x
x
x
파일은 다음과 같아야 합니다.
x
x
x
A
B
C
D
E
F
1
2
3
x
x
x
몇 개의 행으로 이 작업을 수행 할 수 있다는 것을 알고 있지만 숫자를 어느 방향으로든 행을 이동 sed -i s/search/replace/g
하는 더 좋고 쉬운 방법이 있는지 궁금합니다 .x
y
답변1
편집하다
echo -e '7,9m12\n,p' | ed -s file.txt
답변2
다음을 사용하세요 sed
(스트림 편집기에서 가장 쉬운 방법이므로 줄을 아래로 이동하세요).
$ sed '7,9{H;d;}; 12{G;s/\n//;}' <file
x
x
x
A
B
C
D
E
F
1
2
3
x
x
x
sed
이 스크립트를 "12행 다음에 7~9행 이동"으로 해석 할 수 있습니다 .
스크립트 주석은 다음과 같습니다.
7,9{ # These are the lines we'd like to move
H; # Append them to the hold space (separated by newlines)
d; # Delete from pattern space, start next cycle
}
12{ # This is where we'd like to move those lines
G; # Append the hold space
s/\n//; # Remove the newline that the above command inserted
}
# (implicit print)
줄은 줄 번호뿐만 아니라 정규식으로 처리될 수 있으므로 다음도 작동합니다(이 특정 데이터의 경우).
sed '/^1/,/^3/{H;d;}; /^F/{G;s/\n//;}' <file
즉, "로 시작하는 줄에서 시작하는 줄로 이동하고 "로 시작하는 줄 다음으로 1
이동합니다 .3
F
위 내용을 다음과 같이 직접 번역하세요 awk
.
awk '/^1/,/^3/ { hold = hold ORS $0; next }
/^F/ { $0 = $0 hold }
{ print }' <file
"줄 번호"(레코드 번호 awk
) 사용:
awk 'NR == 7, NR == 9 { hold = hold ORS $0; next }
NR == 12 { $0 = $0 hold }
{ print }' <file
조건은 NR == 7, NR == 9
다음과 같이 쓸 수도 있습니다 NR >= 7 && NR <= 9
.
코드 에 100% 일치하려면 sed
두 번째 청크를 읽어야 { $0 = $0 ORS hold; sub(ORS, "", $0) }
하지만 출력 레코드 구분 기호(기본적으로 개행)를 삽입한 다음 즉시 제거하는 것은 약간 어리석은 일입니다.
원본 파일을 위 명령의 결과로 바꾸려면 다음을 수행하십시오.
sed ...as above... <file >newfile && mv newfile file
또는 command 와 동일합니다 awk
.
sed
/에 대한 입력 파일을 awk
읽을 수 없거나 출력 파일을 쓸 수 없는 경우 원본 파일은 변경되지 않습니다.