排序使用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
ex -s -c '2,5!sort'
会把ex
在批处理模式(-s
)并应用命令2,5!sort
输入文件。这将通过执行外部sort
实用程序与给定范围内的行,然后用sort
的输出替换相同的行来对第2行到第5行进行排序。
echo 'x'
用于发送x
命令到ex
这将使它保存其修改的缓冲区并退出。如果没有这个,您必须在终端上手动键入x
,然后按输入退出ex
。
这假定经典的ex
(如在BSD中发现的)。如果你从一个Vim分布有ex
,你可以使用
$ ex -s -c '2,5 sort|x' file
这在使用内部sort命令Vim的ex
(相同的Vim :sort
)。
的要求,在意见:
从2号线所有线下到第二个文件中使用BSD ex
排序,最后一行:
$ echo 'x' | ex -s -c '2,$-1!sort' file
,或者用Vim的ex
:
$ ex -s -c '2,$-1 sort|x' file
范围从2,5
到2,$-1
,即从第2行到“结尾减1”。
可惜sed
不支持相同类型的操作。
但是如何将输出发送到文件中。我希望这个文本在文件中。我必须在每个命令之后将其回显到文件中吗? –
我已经更新了我的答案。 – Cyrus
不错,谢谢你的队友,如果我在最后加上“&& mv test_new.sh test.sh”它甚至会保留它的名字。 –