Выполните команду в 'sed'

Вы попробовали $PROMPT_COMMAND ? Это является наиболее часто используемым для установки xterm заголовка для показа CWD, например. Это выполняется, когда подсказку показывают. Может быть возможно установить Вашу переменную с этим. Первый недостаток был бы то, что Ваша команда будет выполняться каждый раз, Вы нажимаете Enter в оболочке. Второе было бы то, что, если не активны на Вашем терминале в течение долгого времени и дневных передачах, он не будет автоматически установлен. Это будет установлено, после затем вводят в терминал.

# export PROMPT_COMMAND="export today=\`date\`"
# echo $today
Tue Jun 26 01:07:19 EEST 2012
# echo $today
Tue Jun 26 01:07:21 EEST 2012
# echo $today
Tue Jun 26 01:07:22 EEST 2012
9
23.05.2017, 15:40
2 ответа
perl -pe 's|(?<=0x)[0-9a-f]{1,8}|`./convAddrs $&`|gei'
  • perl -pe: как sed: обработайте вход одна строка за один раз в $_, оцените жемчуг [e] xpression, передал -e для каждой строки и [p] rint измененный $_ для каждого.
  • s|X|Y|gei: замена Y для X в $_ ([g] lobally, случай [я] nsensitively и обработка Y как жемчуг [e] xpression вместо основной строки).
  • (?<=0x): оглянитесь для 0x.
  • [0-9a-f]{1,8}: один к 8 шестнадцатеричным цифрам, как можно больше
  • `./convAddrs $&`: замена выводом той командной строки оболочки, где $& заменяется подобранной частью.
8
27.01.2020, 20:06
  • 1
    я получаю следующую ошибку при выполнении команды: Наличие никакого пространства между шаблоном и после слова удерживается от использования в-e строке 1. Модификаторы Regexp "/a" и "/d" являются взаимоисключающими в-e строке 1, в конце строки, модификаторы Regexp "/a" и "/d" являются взаимоисключающими в-e строке 1, в конце строки не Может разделитель строки поиска" '" нигде перед EOF в-e строке 1. –  Fadi Hanna AL-Kass 31.07.2013, 20:24
  • 2
    Конечно, извините свое плохое, необходимо изменить разделитель, поскольку мы не можем использовать / здесь, так как это использовало в сменной детали. Исправленный. –  Stéphane Chazelas 31.07.2013, 20:26
  • 3
    Чертовски, и я, хотя это я был довольно хорош в Perl лайнеры, +1! –  terdon♦ 01.08.2013, 18:00

Это может быть или не быть правдой, что sed не может выполнять команды. Это не верно для GNU sed:

sed -Ee 's/(0[Xx])([0-9A-Za-z]{1,8})/\1\n ./convAddrs \2\n#/g' \
-eh -e  's/\n.//gp;g;s/^/#/e' <"$1"

Мне неясно, что еще может быть в вашем <$1 вводе, и поэтому я стараюсь # закомментировать все, что не является командой \2 в пространстве шаблона. Когда вы используете флаг GNU execute для s///ubstitution, он передает все полученное пространство шаблона в $SHELL -c в качестве второго аргумента, а затем заменяет все пространство шаблона тем, что записывается в stdout этого $SHELL. Итак, выше я вывел сначала все результаты, которые были до этого, а затем результаты передачи командной строки оболочке.

2
27.01.2020, 20:06

Теги

Похожие вопросы