我有一个包含以下行的文件:
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