2017-08-29 100 views
1

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

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

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

是否要删除带有$ VARIABLE_CONTAINING_PATTERN模式的行或与文件第一行匹配的行? – whoan

+0

与我的文件的第一行匹配的行 – Username

+2

在这种情况下,您可以尝试使用'sed -i“/ $ VARIABLE_CONTAINING_PATTERN/{1!d}”$ MY_FILE.txt' – paul

回答

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

按照你的描述字面上 - 删除第一行相匹配的文件的每一行,但不能删除第一行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 
0

这可能为你工作(GNU SED):

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

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

相关问题