将切换文件中行顺序的 sed 命令与 bash 结合起来

goo*_*ose -1 bash sed

我有重复的 sed 命令来切换第 1 行和第 2 行、第 3 行和第 4 行等...我想将这些命令合并到一个 sed 命令中。然而,当我尝试组合它们时,它会添加重复的行并会消除一些行。

编辑:

sed 之前输出的原始文件如下所示:

Some code....
Some code...
Line-a
Line-b
Line-c
Line-d
Line-e
Line-f
some more...
some more...
Run Code Online (Sandbox Code Playgroud)

给出所需输出的代码是:

sed -i '2{h;d};3{p;x}' file.txt && sed -i '4{h;d};5{p;x}' file.txt && sed -i '6{h;d};7{p;x}' file.txt 
Run Code Online (Sandbox Code Playgroud)

我想使用的代码是:

sed -i '2{h;d};3{p;x};4{h;d};5{p;x};6{h;d};7{p;x}' file.txt
Run Code Online (Sandbox Code Playgroud)

有序文件的所需输出

Some code...
Some code...
Line-b
Line-a
Line-d
Line-c
Line-f
Line-e
some more...
some more...
Run Code Online (Sandbox Code Playgroud)

ogu*_*ail 5

假设您使用 GNU sed,( $! ) 除非当前行是文件中的最后一行,( x ) 交换模式空间和保留空间的内容,( n ) 将新行读入模式空间,( G ) 附加使用换行符将保留空间的内容转移到模式空间。( p ) 打印模式空间的内容。

$ cat file
one
two
three
four
five
six
seven
$
$ sed -n -i '$!{x;n;G};p' file
$
$ cat file
two
one
four
three
six
five
seven
Run Code Online (Sandbox Code Playgroud)

为了使其百分百兼容 POSIX,您需要放弃就地编辑并将脚本分解为多个命令:

sed -n -e '$!{x;n;G;}' -e 'p' file
Run Code Online (Sandbox Code Playgroud)

这回答了OP问题的第一个版本。由于他们最新的编辑变得难以辨认,我拒绝编辑。