如何将一些行移动到文件的顶部?

MOH*_*MED 0 linux shell awk sed ash

我有这样一个文件:

aaa.bbb.1.ccc
xxx.bbb.21
mmm.ppp
xxx.eee
mmm.qqqq
xxx.hhh.12.ddd
Run Code Online (Sandbox Code Playgroud)

我想移动开始与所有线路xxx.在文件的顶部用一个简单的命令(使用sed,awk,grep...).

所以我的新文件将如下所示:

xxx.bbb.21
xxx.eee
xxx.hhh.12.ddd
aaa.bbb.1.ccc
mmm.ppp
mmm.qqqq
Run Code Online (Sandbox Code Playgroud)

这该怎么做?

Bir*_*rei 6

一个解决方案:

sed -n '/^xxx/! { H }; // p; $ { x; s/^\n//; p }' infile
Run Code Online (Sandbox Code Playgroud)

H追加不与开始所述内容xxx保持空间,将其相反匹配inmediatly印刷// p.最后一行$恢复保留空间内容,删除前导换行符并打印.

它产生:

xxx.bbb.21
xxx.eee
xxx.hhh.12.ddd
aaa.bbb.1.ccc
mmm.ppp
mmm.qqqq
Run Code Online (Sandbox Code Playgroud)