2016-02-05 3 views
0
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 

ответ

0

Вы можете сделать это следующим образом:

awk '!/^#EXT/' file 

линия печатается, когда условие возврата 1 (истина). Когда /^#EXT/ (или /#EXT/, если хотите) успешно, оно возвращает 1, которое отменяется с помощью !.

!/#EXT/ $1 возвращает результат !/#EXT/ concatened с первым полем $1, поэтому для первой строки: 0#EXTM3U, что оценивается в действительности. Вот почему ваш код не работает.

Примечание: Если символы перевода строки из файла являются CR, вы можете определить его как входной разделитель записей в AWK и установить разделитель вывода на НЧ, как это:

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

еще получить чистый выход! – siamak

+0

@siamak: Это работает для меня. –

+0

может быть проблемой с моей версией awk для OS X? – siamak