私は次の行のペアを含む大きなテキストファイルを編集しています(重複)。
\> 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行移動します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 ......