Bash
重新排序與 Bash 中的字元串匹配的行
我有一個前一個命令的輸出,如下所示:
foo 1 some-string P another-string bar 5 and-another-string
我想將所有包含
P
一個或多個空格的行移到頂部,同時保持其他行的順序,例如:P another-string foo 1 some-string bar 5 and-another-string
行數未知。如果可能的話,它應該是普通的 bash 或
sed
.
sed -n ' / P /p #If line contains " P ", print it / P /!H #Else, append it to hold space ${ #On last line x #Exchange hold space with pattern space s|\n|| #Remove first extra newline p #Print }' file
使用等效的單線執行範例:
$ cat file foo 1 some-string P another-string bar 5 and-another-string APstring A P string ipsum ARP P VC $ sed -n '/ P /p;/ P /!H;${x;s|\n||;p;}' file P another-string A P string P VC foo 1 some-string bar 5 and-another-string APstring ipsum ARP
鑑於需要將所有包含 P 的行(前後有一個或多個空格)移動到頂部,同時保持其他行的順序,我會使用
grep
:{ grep ' *P *' file; grep -v ' *P *' file; }