如何颠倒输入顺序?

如何颠倒输入顺序?

以下代码在按从第一个到最后一个输入时提供向后输出,因此要求输入相反。这如何翻转/逆转?

编辑于 2019-05-23_07:52:04

(printf 'g?%s?m0\n' 0005 0004 0003 0002 0001 ; printf 'wq\n') | ed -s file.txt

不过,我想做的是:

(printf 'g?%s?m0\n' 0001 0002 0003 0004 0005 ; printf 'wq\n') | ed -s file.txt

并在顶部获取输出顺序,file.txt如下所示:

0001
0002
0003
0004
0005

file.txt是一个播放列表ffmpeg,上面的零填充数字是一些选定的视频文件名。播放列表中已有一堆文件名/视频,我想在编译之前将其中一些移至顶部。但是,printf如果需要从头到尾排序,则不需要像命令所要求的那样以相反的顺序输入它们。

更新于 2019-05-23_07:54:27

$ cat file.txt
5575
3585
0004
7774
0003
5385
0001
8658
0002
0005

$ (printf 'g?%s?m0\n' 0001 0002 0003 0004 0005 ; printf 'wq\n') | ed -s file.txt

$ cat file.txt
0005
0004
0003
0002
0001
9374
4845
4834
4883
5848

记下最后一个cat命令和输出的顺序。

答案1

尽管我的建议tac有效,但我认为也许你让这件事变得更加困难。

如果您有file.txt, 并且您只想在 的开头添加一些行file.txt,例如 a 中的行header_file.txt,您可以简单地执行以下操作:

cat header_file.txt file.txt > new_playlist.txt

并做了。

答案2

( printf 'g?%s?m0\n' 0005 0004 0003 0002 0001 | tac ; printf 'wq\n' ) | ed -s file.txt

这会反转ed第一个生成的命令printf

答案3

您可以将行一行一行移至底部(保留所需的顺序),然​​后将它们作为一组移至顶部,而不是逐行移至顶部。一次一步地进行:

  1. 插入占位符行(其内容可以是任何内容 - 最简单的是空行),然后将选定的行移动到文件末尾m$。 (注意:我将g?...?反向搜索更改为更传统的g/.../- 实际上您搜索的方向并不重要。)

    $ { printf '$a\n\n.\n'; printf 'g/%s/m$\n' 0001 0002 0003 0004 0005; printf ',p\nq\n'; } | ed -s file.txt
    5575
    3585
    7774
    5385
    8658
    
    0001
    0002
    0003
    0004
    0005
    
  2. 现在在占位符行上添加一个标记 ( kx),以便我们可以使用以下命令将行寻址x$并将它们移动到顶部'x,$m0

    $ { printf '$a\n\n.\nkx\n'; printf 'g/%s/m$\n' 0001 0002 0003 0004 0005; printf \''x,$m0\n,p\nq\n'; } | ed -s file.txt
    
    0001
    0002
    0003
    0004
    0005
    5575
    3585
    7774
    5385
    8658
    
  3. 最后我们需要删除占位符(现在是第 1 行):

    $ { printf '$a\n\n.\nkx\n'; printf 'g/%s/m$\n' 0001 0002 0003 0004 0005; printf \''x,$m0\n1d\n,p\nq\n'; } | ed -s file.txt
    0001
    0002
    0003
    0004
    0005
    5575
    3585
    7774
    5385
    8658
    

将它们放在一起并替换,pwq以进行就地编辑:

$ cat file.txt
5575
3585
0004
7774
0003
5385
0001
8658
0002
0005
$
$ { printf '$a\n\n.\nkx\n'; printf 'g/%s/m$\n' 0001 0002 0003 0004 0005; printf \''x,$m0\n1d\n,wq\n'; } | ed -s file.txt
$
$ cat file.txt
0001
0002
0003
0004
0005
5575
3585
7774
5385
8658

相关内容