Имеются два работающих терминала, один и тот же пользователь.
Сценарий запущен на одном терминале
Второй терминал должен контролировать, используя top
или ps aux
, и при необходимости завершать процесс с другого терминала.
Вы можете использовать синтаксис «ИЛИ» для регулярных выражений:
sed -E '/png|jpg|svg/d' url.txt
Это приведет к удалению всех строк, содержащих любой шаблон. Если вы хотите убедиться, что этот шаблон является расширением имени файла, т. е. что шаблон встречается в конце строки , вы можете включить якорь в регулярное выражение:
sed -E '/(png|jpg|svg)$/d' url.txt
Между прочим, вам никогда не нужно cat
файл в sed
; он может прочитать их все самостоятельно.
Вы также можете использовать Grep:
grep -vE '\.(svg|jpg|png)' file
-v
печатает только не совпадающие -строки, а -E
включает расширенное регулярное выражение.
\.(svg|jpg|png)
— регулярное выражение, соответствующее .svg
или. jpg
или .png
.
Если вы хотите изменить файл,
Используйте Ed с глобальной командой:
printf '%s\n' 'g/\.\(svg\|jpg\|png\)/d' w q | ed -s file
g
— это глобальная команда, d
удаляет совпадающие строки, w
сохраняет изменения и q
завершает работу.
В системе GNU/Linux с Bash и Vim
vim -e file<<<'g/\v\.(svg|jpg|png)/d|x'
g
снова является глобальной командой, \v
отключает необходимость выхода за скобки, а x
сохраняет изменения.
grep
подходит лучше.
Создайте файл шаблона, например.:
printf '\\.%s$\n' svg jpg png > patterns.txt
И удалить строки с:
grep -vf patterns.txt url.txt
Или напрямую:
grep -ve "$(printf '\\.%s$\n' svg jpg png)" url.txt
Выход:
https://content.example.net/skin/frontend/2015/default/fonts/test.ttf
https://content.example.net/skin/frontend/2015/default/fonts/test.eot
https://content.example.net/skin/forntend/2015/default/js/test.js
с использованием Раку (урожденная Perl 6)
Взяв исходный файл OP url.txt
и добавив фиктивную строку, заканчивающуюся на *.txt
, вот ответ с использованием Raku:
~$ cat url.txt | raku -ne '.say unless.ends-with( "ttf" | "svg" | "eot" | "js" );'
ВЫХОД:
https://content.example.net/skin/forntend/2015/default/js/test.txt
Приведенный выше код работает для конкретного случая, когда вы хотите просмотреть концы строк. (он использует процедуру Раку ends-with
). Используйте if
, если вы хотите выбрать наличие окончания строки; используйте unless
для выбора наличия окончания строки(unless
эквивалентноif not
).
Обратите внимание, что подпрограмма ends-with
также принимает аргумент :ignorecase
(, сокращаемый просто как :i
), если у вас есть файлы с именами как jpg
, так и JPG
и т. д.:
~$ cat url.txt | raku -ne '.say unless.ends-with( "ttf" | "svg" | "eot" | "js", :ignorecase );'
ВЫХОД:
https://content.example.net/skin/forntend/2015/default/js/test.txt
ХТН.