Linux

如何以與執行程式碼相同的順序將包含特定文本的行移動到文件頂部?

  • May 16, 2019

如何以與執行程式碼相同的順序將包含特定文本的行移動到文件頂部?

這是我的程式碼:

printf 'g?_001\|_002\|_003\|_004\|_005?m0\nwq\n' | ed -s target_file

感謝 Steeldriver幫助我走到了這一步。這個網站的使用者真是太棒了!)

這會將它們移動到頂部,如下所示:

name_003
name_005
name_004
name_002
name_001

或者它們最初的順序,只是到頂部。

但我需要將它們按照我在printfand ed中的順序放置code,所以在這種情況下,比如:

name_001
name_002
name_003
name_004
name_005

任何熟悉printf和的人ed

使用單獨的移動命令:

ex -sc 'g?_005?m0' -c 'g?_004?m0' -c 'g?_003?m0' -c 'g?_002?m0' -c 'g?_001?m0' -c wq target_file

注意:

  • 我在ex這裡使用(實際上是 Vim),而不是ed. -c您可以使用該選項在命令行中指定 ex-commands ,因此printf不需要。
  • 模式必須以相反的順序(005首先移動到頂部,然後004,向下推005,然後003,同時向下推004005,…)

printfed也許:

(printf 'g?%s?m0\n' {005..001}; printf 'wq\n') |
 ed -s target_file

引用自:https://unix.stackexchange.com/questions/519189