Das*_*San 2 linux sorting bash lines range
嗨其他溢出用户.
我很想知道如何通过Linux中的终端命令对文件中的一系列行进行排序.
例如在test.sh文件中:
g++ -o test.out \
Main.cpp \
Framework.cpp \
Sample.cpp \
Blub.cpp \
-std=c++14 -lboost
Run Code Online (Sandbox Code Playgroud)
如何从此文件中的第二行到第二行(源文件名)进行排序.
期望的输出:
g++ -o test.out \
Blub.cpp \
Framework.cpp \
Main.cpp \
Sample.cpp \
-std=c++14 -lboost
Run Code Online (Sandbox Code Playgroud)
(从第2 - 5行排序)
感谢您的关注 :)
使用ex行编辑器排序:
$ cat file
g++ -o test.out \
Sample.cpp \
Main.cpp \
Framework.cpp \
Blub.cpp \
-std=c++14 -lboost
$ echo 'x' | ex -s -c '2,5!sort' file
$ cat file
g++ -o test.out \
Blub.cpp \
Framework.cpp \
Main.cpp \
Sample.cpp \
-std=c++14 -lboost
Run Code Online (Sandbox Code Playgroud)
ex -s -c '2,5!sort'将ex进入批处理模式(with -s)并将该命令2,5!sort应用于输入文件.这将通过sort使用给定范围内的行执行外部实用程序,然后使用输出替换相同的行来对第2行到第5行进行排序sort.
该echo 'x'用于发送的x命令,ex这将使其节省了修改过的缓冲区并退出.如果没有这个,你将不得不x在终端手动输入并按下Enter退出ex.
这假设经典ex(在BSD中找到).如果你有exVim发行版,你可以使用
$ ex -s -c '2,5 sort|x' file
Run Code Online (Sandbox Code Playgroud)
这在Vim中使用内部排序命令ex(与:sortVim中相同).
根据意见要求:
使用BSD对文件中第2行到第二行到最后一行的所有行进行排序ex:
$ echo 'x' | ex -s -c '2,$-1!sort' file
Run Code Online (Sandbox Code Playgroud)
或者,与Vim的ex:
$ ex -s -c '2,$-1 sort|x' file
Run Code Online (Sandbox Code Playgroud)
范围从2,5变为2,$-1,即从第2行变为"结束减1".
遗憾的是,sed它不支持相同类型的操作.