有选择地使用sed删除行
我有一个文本文件(比如说文件) 我想从文件中删除“Name”,除非它出现在文件头中。我知道sed会删除行,但是如果我这样做了有选择地使用sed删除行,sed,Sed,我有一个文本文件(比如说文件) 我想从文件中删除“Name”,除非它出现在文件头中。我知道sed会删除行,但是如果我这样做了 sed '/Name/d' file 它删除了所有“名称” 所需输出: Name aaa bbb ccc xxxx yyyy tttt 您能建议我应该使用哪些选项吗?如果您知道第一个标题位于第一行,请按如下方式跳过它: sed '1!{/Name/d}' infile 这意味着该模式应适用于除第1行以外的所有行 或者反过来说: sed -n '2,${/Name/d
sed '/Name/d' file
它删除了所有“名称”
所需输出:
Name
aaa
bbb
ccc
xxxx
yyyy
tttt
您能建议我应该使用哪些选项吗?如果您知道第一个标题位于第一行,请按如下方式跳过它:
sed '1!{/Name/d}' infile
这意味着该模式应适用于除第1行以外的所有行
或者反过来说:
sed -n '2,${/Name/d};p' infile
可能使用awk
:
awk '/Name/ && c++ == 0 || !/Name/' infile
所有情况下的输出:
Name
aaa
bbb
ccc
xxxx
yyyy
tttt
使用以下命令:
sed '1!{/Name/d}' file
前面的命令适用于除第一行以外的所有行。您可能会发现awk语法更直观:
awk 'NR==1 || !/Name/' file
上面只说
如果是行号1或者行号不包含“Name”,那么首先打印它您必须准确地解释如何区分“header”和“content”…header是字符串“Name”第一次出现的时候。它会出现多次,因为我合并了许多较小的文件,所有文件都有标题“Name”,所以在合并它们之前,请从每个文件中删除第一行。在那里做起来更容易,因为你知道第1行是一个标题。一旦它们结合在一起,你就完全无法分辨什么是标题,什么是恰巧看起来像标题的内容。不客气。保留代码>记住操作员。它否定sed中的条件表达式
awk 'NR==1 || !/Name/' file