删除具有特定字符串的特定行

时间:2016-02-05 01:50:10

标签: awk

awk '!/#EXT/ $1' input > output 

不会删除包含#EXT的所有行。输出为空白。我使用的是os x 10.10。 输入文件是:

#EXTM3U
#EXTINF:654,filenameSong1.aiff
/Users/myname/Music/folder1/filenameSong1.aiff
#EXTINF:198,filenamesong2.mp4
/Users/myname/Music/folder1/subfolder2/filenameSong2.mp4
#EXTINF:217,filenameSong3.mp3
/Users/myname/Music/folder1/subfolder3/filenameSong3.mp3
#EXTINF:341,filenameSong4.mp4
/Users/myname/Music/folder1/subfolder3/filenameSong4.mp4

1 个答案:

答案 0 :(得分:0)

你可以这样做:

awk '!/^#EXT/' file

条件返回1(真)时打印一行。当/^#EXT/(或/#EXT/,如果您愿意)成功时,它会返回1,但!会取消。

!/#EXT/ $1返回!/#EXT/与第一个字段$1相连的结果,因此第一行:0#EXTM3U被评估为true。这就是你的代码不起作用的原因。

注意:如果文件的换行符是CR,则可以在awk中将其定义为输入记录分隔符,并将输出记录分隔符设置为LF,如下所示:

awk -v RS='\r' -v ORS='\n' '!/^#EXT/' file