Linux 如何使grep忽略第一行而处理另一行

Linux 如何使grep忽略第一行而处理另一行,linux,sed,grep,Linux,Sed,Grep,我需要删除一些txt文件中以“#”开头的行。但是忽略第一行作为标题。如何使grep忽略第一行,并删除以#开头的任何行(对于其余行) cat sample.txt #"EVENT",VERSION, NAME 1,2,xyz 1,2,abc 1,2,asd 1,2,ert #"EVENT",VERSION, NAME 1,2,xyz 1,2,abc 1,2,xyz cat sample.txt | grep -v "^\s*[#\;]\|^\s*$" > "out.txt" 但这也会删除

我需要删除一些txt文件中以“#”开头的行。但是忽略第一行作为标题。如何使grep忽略第一行,并删除以#开头的任何行(对于其余行)

cat sample.txt
#"EVENT",VERSION, NAME
1,2,xyz
1,2,abc
1,2,asd
1,2,ert
#"EVENT",VERSION, NAME
1,2,xyz
1,2,abc
1,2,xyz

cat sample.txt | grep -v "^\s*[#\;]\|^\s*$" > "out.txt"

但这也会删除标题

尝试将
head
grep
组合如下:

head -1 sample.txt > out.txt && grep -v "^#" sample.txt >> out.txt
结果

#"EVENT",VERSION, NAME
1,2,xyz
1,2,abc
1,2,asd
1,2,ert
1,2,xyz
1,2,abc
1,2,xyz
替代方法

grep "^#" sample.txt | head -1 > out.txt && grep -v "^#" sample.txt >> out.txt

也就是说,grep行以#开头,但只需选择第一行并将其写入文件即可。然后,grep所有不以#开头的行,并将这些留置权附加到同一输出文件。

尝试
head
grep
的组合,如下所示:

head -1 sample.txt > out.txt && grep -v "^#" sample.txt >> out.txt
结果

#"EVENT",VERSION, NAME
1,2,xyz
1,2,abc
1,2,asd
1,2,ert
1,2,xyz
1,2,abc
1,2,xyz
替代方法

grep "^#" sample.txt | head -1 > out.txt && grep -v "^#" sample.txt >> out.txt
也就是说,grep行以#开头,但只需选择第一行并将其写入文件即可。然后,grep所有不以#开头的行,并将这些留置权附加到同一输出文件。

使用sed:

sed '2,${/^#/d}' sample.txt
从第二行(
2
)到最后一行(
$
):搜索(
/…/
)以
#
开头的行(
^
),然后删除(
d
)。sed的默认操作是打印当前行

输出:

#"EVENT",VERSION, NAME 1,2,xyz 1,2,abc 1,2,asd 1,2,ert 1,2,xyz 1,2,abc 1,2,xyz #“事件”、版本、名称 1,2,xyz 1,2,abc 1,2,自闭症 1,2,ert 1,2,xyz 1,2,abc 1,2,xyz 对于sed:

sed '2,${/^#/d}' sample.txt
从第二行(
2
)到最后一行(
$
):搜索(
/…/
)以
#
开头的行(
^
),然后删除(
d
)。sed的默认操作是打印当前行

输出:

#"EVENT",VERSION, NAME 1,2,xyz 1,2,abc 1,2,asd 1,2,ert 1,2,xyz 1,2,abc 1,2,xyz #“事件”、版本、名称 1,2,xyz 1,2,abc 1,2,自闭症 1,2,ert 1,2,xyz 1,2,abc 1,2,xyz 在gnu-sed上试用

sed '0,/^#/n;/^#/d' sample.txt
在gnu-sed上试用

sed '0,/^#/n;/^#/d' sample.txt

如果行号为1或不是以
#
开头,这将导致任何awk打印每一行:


如果行号为1或不是以
#
开头,这将导致任何awk打印每一行:

这可能适用于您(GNU-sed):

忽略第一行并删除以
#

开头的任何其他行这可能适合您(GNU-sed):


忽略第一行并删除以
#

开头的任何其他行将任意命令应用于文件或表格数据流的第一行(标题)以外的所有行,这是我的常见任务,因此我为其定义了一个名为
body
的辅助工具:

作为shell函数(将其放入
~/.bashrc
或等效文件中):

body(){
IFS=读取-r头
printf“%s\n”$header
"$@"
}
现在:


信用证:改编自:,它是可以放入shell路径变量中的许多方便的数据工具之一。希望其中许多可以规范化为标准UNIX工具。

对文件或表格数据流的第一行(标题)以外的所有行应用任意命令对我来说是一项非常常见的任务,因此我为其定义了一个名为
body
的帮助工具:

作为shell函数(将其放入
~/.bashrc
或等效文件中):

body(){
IFS=读取-r头
printf“%s\n”$header
"$@"
}
现在:


信用证:改编自:,它是可以放入shell路径变量中的许多方便的数据工具之一。希望这些工具中的许多能够被规范化为标准的UNIX工具。

可能重复的,等等。我不这么认为。我需要在输出文件中写入头文件,以避免重复,等等。我认为它不一样。我还需要在输出文件中写入头文件