如何将字符串从一行移动到另一行

如何将字符串从一行移动到另一行

我一直在编辑一个包含成对行的大型文本文件,如下所示(重复):

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

GNUsed表达式的详细信息:

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命令在编辑器中移动一行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 ......

相关内容