我想删除与第一行匹配的文件的每一行,但不删除第一行。如何删除与第一行匹配的文件中的每一行
到目前为止,我已经试过这段代码,但它删除了包括第一行的所有匹配模式。
sed -i "1,/$VARIABLE_CONTAINING_PATTERN/d" $MY_FILE.txt
我想删除与第一行匹配的文件的每一行,但不删除第一行。如何删除与第一行匹配的文件中的每一行
到目前为止,我已经试过这段代码,但它删除了包括第一行的所有匹配模式。
sed -i "1,/$VARIABLE_CONTAINING_PATTERN/d" $MY_FILE.txt
使用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
因此,你应该提供适当的样本数据与预期输出。
按照你的描述字面上 - 删除第一行相匹配的文件的每一行,但不能删除第一行,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
这可能为你工作(GNU SED):
sed -i '1h;1!G;/^\(.*\)\n\1$/!P;d' file
复制的第一行进入货舱空间(HS)。对于除第一行以外的每一行,将HS附加到模式空间(PS)。将当前行与第一行进行比较,如果不相同,则打印当前行。删除模式空间。
是否要删除带有$ VARIABLE_CONTAINING_PATTERN模式的行或与文件第一行匹配的行? – whoan
与我的文件的第一行匹配的行 – Username
在这种情况下,您可以尝试使用'sed -i“/ $ VARIABLE_CONTAINING_PATTERN/{1!d}”$ MY_FILE.txt' – paul