2017-08-29 96 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)。將當前行與第一行進行比較,如果不相同,則打印當前行。刪除模式空間。

相關問題