我有一個包含以下幾行的文件:
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
根據您的需要。
答案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