한 줄에서 다른 줄로 문자열을 이동하는 방법

한 줄에서 다른 줄로 문자열을 이동하는 방법

나는 다음과 같은 줄 쌍을 포함하는 큰 텍스트 파일을 편집하고 있습니다(중복).

\> destination_file.txt

js -e "var e='.jpg',t='b',i='14712583',h='0.us.is.example.com',s='/',n='WIV',u='jasper1123/‌​3/example.com_'+i+n.charAt(2)+n.charAt(0)+n.charAt(1); console.log('http://'+t+h+s+u.charAt(0)+s+u+e);"

수정된 버전은 다음과 같습니다.

line 1
line 2
line 3
line 4

다음과 같이 첫 번째 행을 두 번째 행의 끝으로 어떻게 이동할 수 있습니까?

line 2
line 1
line 4
line 3

이 텍스트 파일에는 위에서 설명한 대로 수천 쌍의 줄이 포함되어 있습니다.

이 작업을 수행하기 위해 터미널 명령을 실행할 수 있습니까?

기본적으로 위의 데이터는 수많은 HTML 페이지를 결합하고 편집한 결과입니다.

어떤 제안이라도 대단히 감사하겠습니다.

제가 여기까지 올 수 있었던 것은 주로 이 포럼의 도움 때문이었습니다.

답변1

sed -e '1~2{h;d};G'

GNU 표현식 sed에 대한 세부사항 :

1~2 {  # lines 1,3,5,7 etc.
  h      # save line in the hold space
  d      # delete (don't print yet) and start next line
}
# only reached on lines 2,4,6,8 etc.
G        # retrieve from hold space, append to current line

답변2

>앞의 백슬래시 는 단지 오타일 뿐이라고 생각합니다 . 텍스트 파일의 형식이 올바른 경우 다음 bash 스크립트를 사용할 수 있습니다.

#!/bin/bash

while
    read -r a &&  # store one line to $a
    read -r   &&  # consume the blank line
    read -r b     # store another line to $b
do
    echo $b$a     # join those two lines
    read -r       # whatever, try to consume a blank line
done

에 저장하세요 s.sh.

파일 내용은 다음과 같습니다.

A

A-

B

B-

C

C-

그런 다음 실행하면 다음을 bash s.sh < file.txt얻을 수 있습니다.

A-A
B-B
C-C

답변3

$ printf '1m2\n,p\n' | ed -s file
line 2
line 1
line 3
line 4

m명령은 편집기에서 한 줄을 이동합니다 ed. 1m2행 1을 행 2로 이동합니다. ,p수정된 버퍼를 표준 출력에 표시합니다.

파일을 제자리에서 편집하는 방법에 대한 대안:

ed -s file <<END_ED
1m2
w
q
END_ED

그러면 이동이 수행되고 결과가 다시 파일에 기록된 후 종료됩니다.

답변4

사용, 파일이 RAM 메모리가 감당할 수 없을 정도로 크지 않은 경우:

perl -0 -e '                     # -0 slurp the whole file 
    $\ = $, = "\n";              # change record & list separator
    my @file = split /\n/, <>;   # split the file on line per array value
    print @file[1,0,2..$#file]   # array slice
' file

바꾸고 싶다면제자리에, 사용

perl -i -e ......

관련 정보