Это сделает задание:
perl -pe 'BEGIN { $/ = "//" } s!(?=http://\z)!\n!' urls.txt
Путем установки $/, я изменил определение строки, таким образом, это заканчивается //
вместо новой строки. Это заставляет Perl считать один URL за один раз. Маловероятно, что URL содержит //
кроме после схемы, но хорошо, если Вы сделаете, то regex помешает ему добавлять побочные новые строки.
Если Вы не хотите добавлять пустую строку перед первым URL:
perl -pe 'BEGIN { $/ = "//"; print scalar <> } s!(?=http://\z)!\n!' urls.txt
Вы могли бы попытаться сравнить, чтобы видеть ли s!http://\z!\nhttp://!
быстрее. Они эквивалентны. Обратите внимание что /g
флаг не необходим на замене, потому что может только быть одно соответствие на "строку".
Во многих оболочках включая ksh
, zsh
и bash
, time
ключевое слово и привыкло к конвейерам времени.
time foo | bar
Будет время оба foo
и bar
команды (zsh
покажет Вам разбивку). Это сообщает об этом относительно stderr оболочки.
time foo.sh > bar.txt
Скажет Вам, что время должно было открыться bar.txt
и выполненный foo.sh
.
Если Вы хотите перенаправить time
вывод, необходимо перенаправить stderr
в контексте, где time
запускается как:
{ time foo.sh; } 2> bar.txt
Это:
2> bar.txt time foo.sh
работы также, но с ksh93
и bash
, потому что это не находится в первом положении, time
не распознан как ключевое слово, таким образом, time
команда используется вместо этого (Вы, вероятно, заметите другой выходной формат, и это не делает конвейеров времени).
Обратите внимание, что оба перенаправили бы и вывод времени и ошибки foo.sh
кому: bar.txt
. Если бы Вы только хотите вывод времени, Вам было бы нужно:
{ time foo.sh 2>&3 3>&-; } 3>&2 2> bar.txt
Обратите внимание, что POSIX не указывает ли time
ведет себя как ключевое слово или встроенный (ли это конвейеры времен или единственные команды). Таким образом, чтобы быть портативным (в случае, если Вы хотите использовать его в a sh
сценарий, который Вы хотите портативный к различным подобным Unix системам), необходимо, вероятно, записать это:
command time -p foo.sh 2> bar.txt
Обратите внимание, что Вы не можете функции времени или builtins или конвейеры или перенаправление foo.sh
ошибки отдельно там, если Вы не запускаете отдельную оболочку как в:
command time -p sh -c 'f() { blah; }; f | cat'
Но это означает, что синхронизация будет также включать время запуска этого дополнительного sh
.
Не все версии времени поддерживают-o и - выходные аргументы.
Вы захотите выполнить команду как это:
(time script.sh) 1> /dev/null 2> /tmp/logFile
Это поместит вывод script.sh в/dev/null и результаты к/tmp/logFile.
Если Вы хотите, чтобы и STDERR и STDOUT перешли к файлу журнала, можно выполнить его как это:
(time script.sh) &> /tmp/logFile
Получить вывод ls
и вывод time
в файле:
(time ls) &> log
Получить просто вывод time
в файле:
(time ls) 2> log
/usr/bin/time
выводы к stderr
, таким образом, необходимо будет перенаправить это.
/usr/bin/time foo.sh 2>bar.txt
Если Вы используете удар' time
встроенный, необходимо записать это по-другому:
(time ls) 2>bar.txt
С другой стороны, GNU time
поддержки --output
аргумент:
/usr/bin/time --output bar.txt foo.sh
/usr/bin/time -V
. Существует также команда времени, встроенная в удар.
– slm♦
09.05.2013, 23:26
(time ls) 2>bar.txt
это хорошо работает.
– slm♦
09.05.2013, 23:39