Вот как это сделать в sed
:
sed -n '/$$</! H; /$$</{x; s/\n/\t/gp}; ${x; s/\n/\t/gp}' stage1 > stage3
По частям:
sed -n
означает, что вывод по умолчанию не выводится (т. Е. массовый ввод);
выводится только при наличии команды p
. / $$ ! H
означает, что когда вы видите строку не , содержащую $$ <
,
добавьте ее в « h старое пространство» (т. Е. , плацдарм).
!
инвертирует обычную логику,
означает «сделайте это для строк, которые не удовлетворяют этому условию».
Если вам нужно игнорировать $$ <
, которое встречается в середине строки,
измените эту (и следующую команду) на / ^ $$
.
(Если вам нужно обработать $$ <
в середине строки другим способом -
например, вставить перед ним новую строку - измените свой вопрос, чтобы указать это.)
Если вы добавляете строку в удерживаемое пространство, когда там уже что-то есть (в удерживаемом пространстве), sed
вставляет новую строку между ними,
, так что это создаст текст в пространство удержания, которое выглядит следующим образом:
$$ <002L_tbfl новая строка Предполагаемый фактор транскрипции 001R; новая строка GO: 0006355…
Пространство удержания, как "пространство шаблонов" "(обычный буфер рабочей строки) обычно не будет иметь явного перевода строки в конце (это неявно). Конечно, можно явно вставлять символы новой строки в пробелы.
/ $$ {…}
означает выполнение команд в фигурных скобках
в строках, содержащих $$ <
.
x
означает, что e x изменяет содержимое
пространства хранения и пространства шаблонов. s / \ n / \ t / gp
означает - ну это очевидно, не так ли? -
означает замену новой строки табуляцией (в пространстве шаблона)
g локально и p запечатать результат. Когда эта команда считывает первую строку вашего ввода
(которая действительно содержит $$ <
), x
перемещает эту строку ( $$ <002L_tbfl
)
из пространства шаблонов в пространство хранения
и перемещает предыдущее содержимое пространства хранения в пространство шаблонов.
Но поскольку исходное содержимое удерживаемого пространства ничего не значит,
это означает, что команде s
не над чем работать.
Впоследствии, когда вы увидите $$ <
(например,в строке 7),
он переносит текст со встроенными символами новой строки (как показано выше)
в пространство шаблонов и
(как описано) заменяет все символы новой строки табуляциями и печатает результат.
$ {…}
означает выполнение команд в фигурных скобках
, когда вы дойдете до конца ввода.
Это те же самые команды, которые мы выполняем, когда видим $$ <
,
для удаления последней строки (т.е. последней группы строк) {{1 }} из удерживаемого пространства. Предупреждение: это не гарантирует работу в POSIX sed
.
Я тестировал его на GNU sed
.
Стандарта нет, и в зависимости от приложения используются как прописные, так и строчные буквы (см. также HTTPS_PROXY, ALL_PROXY, NO_PROXY).
Например:
curl
ENVIRONMENT VARIABLES
Curl reads and understands the following environment variables:
http_proxy, HTTPS_PROXY, FTP_PROXY
They should be set for protocol-specific proxies. General proxy should be
set with
ALL_PROXY
A comma-separated list of host names that shouldn't go through any proxy is
set in (only an asterisk, '*' matches all hosts)
NO_PROXY
git
http.proxy
Override the HTTP proxy, normally configured using the http_proxy, https_proxy,
and all_proxy environment variables (see curl(1)). [..]
Python
urllib.request.getproxies()
поддерживает как строчные, так и прописные буквы.
Здесь также упоминается проблема безопасности:
Если установлена переменная среды REQUEST_METHOD, которая обычно указывает, что ваш сценарий выполняется в среде CGI, переменная среды HTTP_PROXY (прописная буква _PROXY) будет игнорироваться. Это связано с тем, что эта переменная может быть введена клиентом с использованием HTTP-заголовка «Proxy:». Если вам нужно использовать прокси-сервер HTTP в среде CGI, либо явно используйте ProxyHandler, либо убедитесь, что имя переменной написано в нижнем регистре (или хотя бы суффикс _proxy).
Некоторые приложения позволяют NO_PROXY
содержать звездочки/диапазоны IP-адресов, а другие — нет.
Так что
export https_proxy=$http_proxy HTTP_PROXY=$http_proxy HTTPS_PROXY=$http_proxy NO_PROXY=$no_proxy
должен был тебя прикрыть.