我想刪除文件(file.a
)中所有以##
開頭的行,並將其替換爲另一個文件(file.b
)的所有行。要從file.a
中刪除的行首先出現在該文件中(前面沒有行)。sed輸出的貓
長的方法是:
sed -i '/##/d' file.a
cat file.b file.a > file.c
mv file.c file.a
是否有短(排隊)的方式?
我想刪除文件(file.a
)中所有以##
開頭的行,並將其替換爲另一個文件(file.b
)的所有行。要從file.a
中刪除的行首先出現在該文件中(前面沒有行)。sed輸出的貓
長的方法是:
sed -i '/##/d' file.a
cat file.b file.a > file.c
mv file.c file.a
是否有短(排隊)的方式?
例如文件file.a
## line
## line
## line
linea1
linea2
linea3
和file.b
lineb1
lineb2
lineb3
這應該做到這一點:
$ sed -e '1r file.b' -e'/^##/d' file.a
lineb1
lineb2
lineb3
linea1
linea2
linea3
的r filename
命令插入在第1行的文件,並且所述第二命令刪除以##
開頭的所有行。他們必須在不同的-e
表情,因爲在文件名後必須有一個新行或命令的結束,所以這會工作,以及:
sed '1r file.b
/^##/d' file.a
對於file.a
就地改造,該命令變爲
sed -i -e '1r file.b' -e'/^##/d' file.a
注意,命令的順序是顯著:刪除命令(d
)開始一個新的循環,而這被跳過後到來的任何命令,所以r
有先走。 Hat-tip:potong
N.B.執行'd'命令後的任何命令都不會被執行,因爲它會刪除模式空間並開始[新週期](http://www.gnu.org/software/sed/manual/sed.html#Common-Commands) 。因此,命令必須按照上述順序,而不是相反。 – potong
@potong我會繼續說,我知道這一點;)讓我明確指出。 –
如果'file.a'有2行以'##'開始,'file.b'有總共10行,那麼您希望從'file'中刪除2行.a'並將'file.b'的所有'10'行附加到'file.a'? – Utsav
以某種方式。你可以說我想從file.a中刪除所有n個第一行(以「##」開頭)並將file.b添加到file.a.我不知道n是aprior,儘管grep「##」file.a | wc -l會解決這個問題。 – user1701545