Как сократить объем производства, чтобы только собрать имя файла и получать-параметр?

От man bash:

   trap [-lp] [[arg] sigspec ...]
          The command arg is to  be  read  and  executed  when  the  shell
          receives  signal(s)  sigspec.

Когда Ваша программа segfaults, Ваш удар просто получает a SIGCHLD потому что некоторый ребенок, из которого выходят (любым способом).

Можно, однако, использовать код выхода, сохраненный в $?, в некотором условном выражении и прерывании SIGCHLD:

trap 'if [[ $? -eq 139 ]]; then echo "segfault !"; fi' CHLD

Отметьте это set -bm мог бы быть необходим, если это (что это, вероятно, делает) используется в неинтерактивном ударе (таком как сценарий).

Править: См. также ответ этих (Жабр) на подобном использовании проблемы bash и trap.

2
28.11.2011, 17:41
3 ответа

Я не имею ack-grep утилита на моем Mac так будет это awk работа решения для Вас?

awk -v FS=[?\"] '/param/{print FILENAME; print $3 }' INPUT_FILE

Выполнение:

[jaypal:~/Temp] cat file0
<a href="http://example.com/fnord.layername.html?parameter=FOO-_-BAR-_-FNORD" class="poit">
    <img ... />
</a>

[jaypal:~/Temp] awk -v FS=[?\"] '/param/{print FILENAME; print $3 }' file0
file0
parameter=FOO-_-BAR-_-FNORD

Вероятная работа вокруг для Вас:

Если получение имени файла наряду со значениями параметров очень важно, затем можно или выполнить это с простым for loop или можете быть Вы, может перенаправить вывод, в котором Вы добираетесь в настоящее время до файла или передаете его по каналу к следующему awk острота.

Простой для цикла:

[jaypal:~/Temp] for i in ./file*.txt; do awk -v FS=[?\"] '/param/{print FILENAME; print $3"\n" }' "$i"; done
./file01.txt
parameter=FOO-_-BAR-_-FNORD

./file02.txt
parameter=POIT-_-NARF-_-BAZINGA

Перенаправление текущей производительности в файл и вызов awk на нем:

Следование примеру принимает redirection из Вашей текущей производительности в файл, названный temp.file.

[jaypal:~/Temp] cat temp.file 
fileName.txt
1:<a href="http://example.com/fnord.layername.html?parameter=FOO-_-BAR-_-FNORD" class="poit">

fileName2.txt
5:<a href="http://example.com/fnord.layername.html?parameter=POIT-_-NARF-_-BAZINGA" class="poit">

[jaypal:~/Temp] awk -v FS=[?\"] 'NF==1{ print $0 }/param/{ print $3"\n" }' temp.file 
fileName.txt
parameter=FOO-_-BAR-_-FNORD

fileName2.txt
parameter=POIT-_-NARF-_-BAZINGA
1
27.01.2020, 22:07

Я не уверен, что понимаю, и я не знаком с ack-grep утилитой, но почему Вы не пытаетесь сократить из первого вхождения? к "?

Что-то как следующее:

По причине удобочитаемости я поместил тег HTML в переменную

var='<a href="http://example.com/fnord.layername.html?parameter=FOO-_-BAR-_-FNORD" class="poit">'

cut -d '?' -f 2- <(echo $var ) | cut -d '"' -f 1
0
27.01.2020, 22:07
  • 1
    , ПАНЕЛЬ и FNORD могут отличаться. –  k0pernikus 28.11.2011, 18:37

Можно использовать --output EXPR аргумент ack-grep для выборочной печати просто части строки. Следует иметь в виду, что ack-grep является сценарием Perl, аргументом EXPR является просто любое выражение Perl; в этом случае я использую круглые скобки в соответствии шаблона для захвата просто части строки от? к закрытию, "(я также использую обратную косую черту для заключения в кавычки regexp метасимвола'?' который Вы не сделали, хотя, возможно, как первый символ в regexp, который, могло бы оказаться, работал бы).

ack-grep -a --output '$1' '\?(parameter=.*?)"'

Отметить последнее? в regexp делает.* нежадное, так, чтобы он соответствовал до первого "а не последнего на строке.

Это генерирует выходные строки как 1:parameter=FOO-_-BAR-_-FNORD - можно подавить продвижение 1: с -h аргумент ack-grep.

2
27.01.2020, 22:07

Теги

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