Sed обрабатывает вводить построчно. В Perl проще обрабатывать весь файл сразу:
perl -0777 -pe 's=<script>.*?\n.*?</script>==sg'
-0777
читает весь файл ?
после того, как *
делает его «экономным», т.е. кратчайшая возможная строка. / с
составляет .
соответствует новой строке, чего обычно не происходит. Обратите внимание, что он может сломаться, если сценарий содержит
в комментарии или кавычках. Лучше бы HTML разобрать.
screen
переименовывает свой основной (серверный )процесс SCREEN
, чтобы отличить его от более поздних клиентов.
Это очень косвенно упоминается однажды на странице руководства:
Note that this command only affects debugging output from the main "SCREEN" process correctly. Debug output from attacher processes can only be turned off once and forever.
, но, как ни странно, нигде прямо не упоминается.
ps
и ps -f
отображают разные вещи для CMD :имя исполняемого файла (ps
, спецификатор формата "command" )и восстановленную командную строку (ps -f
, спецификатор формата "args" ). Последний использует ARGV процесса и видит его изменения, в то время как само имя исполняемого файла остается неизменным.
ps -A
использует формат по умолчанию, который показывает pid, терминал, кумулятивное процессорное время и имя исполняемого файла (ucmd
). Имя исполняемого файла не подлежит изменению и точно отражает имя используемого исполняемого файла.
ps -Af
использует полный формат, который среди других полей показывает полную команду с аргументами(comm
илиargs
). Полную команду можно изменить, и, как объяснено в ответе Майкла Гомера , screen
, она изменяет ее, чтобы показать, является ли процесс клиентом или сервером.
Чтобы найти screen
процессы и определить их назначение, используйте
ps -fC screen
Это показывает полную информацию о процессах, имя исполняемого файла которых соответствует screen
.
Таким образом, строго говоря, на вопрос, почему они это делают, ответить невозможно, поскольку в качестве предпосылки он принимает ложь.
Они показывают столбцы cmd
и ucmd
, два разных фрагмента информации. К сожалению, и программа GNU ps
, и программа FreeBSD ps
вносят здесь путаницу.
Ядра, такие как Linux и ядра BSD, предоставляют четыре (релевантных )фрагмента информации о процессе через файлы в /proc
иsysctl()
:
execve()
и изменяемые во время выполнения; execve()
и изменяемые во время выполнения; и Строки аргументов и строки окружения можно изменять во время выполнения способами, описанными вhttps://unix.stackexchange.com/a/438007/5132и https://unix.stackexchange.com/a/432681/5132. Linux также позволяет изменять имя учета процесса.
GNU Screen изменил строки своих аргументов, так что первая из них читается как «SCREEN», а не имя учета процесса, которое осталось как «экран».
В ps
есть только два столбца для отображения этих четырех частей информации. В FreeBSD ps
столбцы содержат эту информацию следующим образом:
command
и args
содержит строки аргументов, а также строки среды, если используется параметр e
, а также имя учета в квадратных скобках, если оно не соответствует первой из строк аргументов. ; все с префиксом древовидной диаграммы, если используется опция d
и это последний столбец. ucomm
и comm
содержит учетное имя процесса. GNU ps
добавляет cmd
в качестве псевдонима для первого и ucmd
в качестве псевдонима для второго. Он помещает древовидную диаграмму и строки среды в оба столбца и всегда помещает древовидную диаграмму, даже если столбец , а не последний столбец.
В GNU ps
параметр -f
(, который не следует путать с параметром f
)в -Af
в вопросе, является просто сокращением для указания другого набора столбцов для ps
для печати. Набор столбцов по умолчанию включает ucmd
. Набор, используемый при использовании опции -f
, вместо этого включает cmd
.
Руководство для BSD ps
излагает это явно, давая точные столбцы, выбранные его сокращениями -j
, -l
, -u
и -v
. В руководстве для GNU ps
упоминаются «полный формат», «формат заданий», «длинный формат» и «пользовательский формат», но явно не указывается, к какому набору столбцов относится каждый из них.
Чтобы еще больше запутать,и GNU ps
, и FreeBSD ps
не используют имена столбцов, используемые в командной строке, в заголовках столбцов, указанных в их выходных данных. Таким образом, часто нельзя определить только по заголовку столбца, какой столбец на самом деле отображается.
ps
помечает столбец имени учета либо UCOMM
, либо COMMAND
, но также помечает столбец строк аргументов COMMAND
. ps
помечает столбец строк аргументов как CMD
или COMMAND
, но также помечает столбец имени учета как CMD
или COMMAND
. (Для сравнения s6-ps
Лорана Берко содержит только comm
, args
и env
с фиксированными и отдельными метками заголовков COMM
, COMMAND
и ENVIRONMENT
, что дает только первый три из четырех порций информации из ядра напрямую, без их объединения.)
s6-ps
. s6 -linux -утилиты . Программное обеспечение.