![한 줄에서 다른 줄로 문자열을 이동하는 방법](https://linux55.com/image/9011/%ED%95%9C%20%EC%A4%84%EC%97%90%EC%84%9C%20%EB%8B%A4%EB%A5%B8%20%EC%A4%84%EB%A1%9C%20%EB%AC%B8%EC%9E%90%EC%97%B4%EC%9D%84%20%EC%9D%B4%EB%8F%99%ED%95%98%EB%8A%94%20%EB%B0%A9%EB%B2%95.png)
나는 다음과 같은 줄 쌍을 포함하는 큰 텍스트 파일을 편집하고 있습니다(중복).
\> 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 ......