如何从与第一行匹配的文件中删除每一行

时间:2017-08-29 04:10:07

标签: bash sed

我想删除与第一行匹配的文件的每一行,但不删除第一行。

到目前为止,我已尝试过此代码,但它会删除所有匹配的模式,包括第一行。

sed -i "1,/$VARIABLE_CONTAINING_PATTERN/d" $MY_FILE.txt

3 个答案:

答案 0 :(得分:2)

按照字面意思描述 - 删除与第一行匹配的文件的每一行,但不删除第一行 awk 溶液:

我们说我们有以下myfile.txt

my pattern
some text
another pattern
regex
awk sed
my pattern
text text
my pattern
our patterns
awk 'NR==1{ pat=$0; print }NR>1 && $0!~pat' myfile.txt > tmp && mv tmp myfile.txt

最终myfile.txt内容:

my pattern
some text
another pattern
regex
awk sed
text text
our patterns

答案 1 :(得分:0)

使用awk。解决方案取决于您对匹配的定义:

$ cat file
1
2
3
1
12
$ awk 'NR==1{p=$0;print;next} p $0 != p' file
1
2
3
12
$ awk 'NR==1{p=$0;print;next} $0 !~ p' file
1
2
3

因此,您应该提供具有预期输出的正确样本数据。

答案 2 :(得分:0)

这可能适合你(GNU sed):

sed -i '1h;1!G;/^\(.*\)\n\1$/!P;d' file

将第一行复制到保留空间(HS)。对于除第一行之外的每一行,将HS附加到模式空间(PS)。将当前行与第一行进行比较,如果不相同则打印当前行。删除模式空间。