只刪除文件中的一行

只刪除文件中的一行

我有一個包含以下幾行的文件:

SUKsoft:
SUKsoft: App-Conduct_Risk_Comment
SUKsoft: App-Conduct_Risk_R
SUKsoft: App-Conduct_Risk_RW

如何刪除“SUKsoft:”行?

該行可以位於文件的任何位置(從現在開始,或在中間)。

有命令可以做到這一點嗎?

答案1

消除線路使用

sed -i '/SUKsoft:\s*$/d' your_file 

例子

% cat foo
SUKsoft: 
SUKsoft: App-Conduct_Risk_Comment   
SUKsoft: App-Conduct_Risk_R
SUKsoft: App-Conduct_Risk_RW

% sed -i '/SUKsoft:\s*$/d' foo

% cat foo                    
SUKsoft: App-Conduct_Risk_Comment   
SUKsoft: App-Conduct_Risk_R
SUKsoft: App-Conduct_Risk_RW

答案2

以下是刪除所需行的步驟:

$ sed 's/SUKsoft: *$//' file.txt

SUKsoft: App-Conduct_Risk_Comment
SUKsoft: App-Conduct_Risk_R
SUKsoft: App-Conduct_Risk_RW

我假設file.txt包含這些行。

或者,

$ sed 's/SUKsoft: *$//; /^$/d' file.txt
SUKsoft: App-Conduct_Risk_Comment
SUKsoft: App-Conduct_Risk_R
SUKsoft: App-Conduct_Risk_RW

它不會留下任何空白的線。

要編輯您可以使用的文件,

sed -i 's/SUKsoft: *$//' file.txt

或者

sed -i 's/SUKsoft: *$//; /^$/d' file.txt

根據您的需要。

AB的答案,它是以更緊湊的方式完成的。謝謝通配符

答案3

grep搜尋滿足模式的線。 grep -v 丟棄滿足模式的線。

grep -v '^SUKsoft: *$'

此模式是:^以 ( )開頭的行SUKsoft:,可能後面跟著空格,但直到行結束 ( $) 為止沒有其他內容。

答案4

從你的情況來看發布非原始來源「SUKsoft:」後面沒有空格或空格序列,但是為了安全起見,此指令會處理那些存在的情況。

使用 Perl:

perl -ne '!/^SUKsoft: *$/&&print' input
  • !/^SUKsoft:$/&&print:如果當前行與模式(模式匹配以字串開頭後跟零個或多個空格的^SUKsoft: *$行)不匹配,則列印該行;SUKsoft:
% cat input
SUKsoft:
SUKsoft: App-Conduct_Risk_Comment
SUKsoft: App-Conduct_Risk_R
SUKsoft: App-Conduct_Risk_RW
% perl -ne 'print unless /^SUKsoft: *$/' input
SUKsoft: App-Conduct_Risk_Comment
SUKsoft: App-Conduct_Risk_R
SUKsoft: App-Conduct_Risk_RW

相關內容