排序使用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」它甚至會保留它的名字。 –