我想删除与第一行匹配的文件的每一行,但不删除第一行。
到目前为止,我已尝试过此代码,但它会删除所有匹配的模式,包括第一行。
sed -i "1,/$VARIABLE_CONTAINING_PATTERN/d" $MY_FILE.txt
答案 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)。将当前行与第一行进行比较,如果不相同则打印当前行。删除模式空间。