ある行から別の行に文字列を移動する方法

ある行から別の行に文字列を移動する方法

私は次の行のペアを含む大きなテキストファイルを編集しています(重複)。

\> 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

次のように、最初の行を2番目の行の終わりにどのように移動できますか?

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コマンドはエディタで1行移動しますed1m2行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 ......

関連情報