Linux
如何以與執行程式碼相同的順序將包含特定文本的行移動到文件頂部?
如何以與執行程式碼相同的順序將包含特定文本的行移動到文件頂部?
這是我的程式碼:
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
或者它們最初的順序,只是到頂部。
但我需要將它們按照我在
printf
and 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
,同時向下推004
和005
,…)和
printf
,ed
也許:(printf 'g?%s?m0\n' {005..001}; printf 'wq\n') | ed -s target_file