Вы хотите включить $ PATH
, если вы используете bash, вы обычно хотите установить что-то вроде строки ниже в вашем файле .bashrc:
PATH=$PATH:/path/to/new/directory/
т.е. $PATH - ваш токнет PATH
и /path/to/new/directory - это путь, в котором хранятся новые двоичные файлы.
в моем случае, как правило, у меня есть некоторые скрипты в моем $ HOME / bin поэтому я бы сделал: PATH=$PATH:$HOME/bin
, затем обязательно отправьте файл, чтобы применить изменения к вашей текущей оболочке.
т.е. source ~/.bashrc или . ~/.bashrc
Этот вариант не передает разделители [begin ...] и [end ...].
#!/usr/bin/awk -f
BEGIN {
insect=0 # we are out of a section
}
/^\[begin [a-z0-9_]+\]/ {
insect=1 # section opening
next
}
insect == 1 {
if($0 ~ /^header=7075\|/) {
insect=2 # we are inside the right section
}
else {
insect=0 # we are in a different section
next
}
}
/^\[end [a-z0-9_]+\]/ && (insect == 2 || insect == 1) {
exit 0 # end of the right section -> stop processing
}
insect == 2 {
print # we are inside the right section -> pass all lines
}
#!/usr/bin/awk -f
BEGIN {ins=0}
/^\[begin [a-z0-9_]+\]/ {beg=$0; getline; if($0 ~ /^header=7075\|/) {print beg; ins=1}}
/^\[end [a-z0-9_]+\]/ && ins {print; exit 0}
ins
как однострочный :) Я не понимаю спрос на однострочные, но вот он:
awk 'BEGIN {ins=0} /^\[begin [a-z0-9_]+\]/ {beg=$0; getline; if($0 ~ /^header=7075\|/) {print beg; ins=1}} /^\[end [a-z0-9_]+\]/ && ins {print; exit 0} ins'
Преимущество программ в этом ответе состоит в том, что они обрабатывают ввод строки за строкой, как это обычно бывает в утилитах Unix. Это позволяет программе обрабатывать разделы журнала без экстремальных требований к памяти и позволяет программе работать параллельно (на многоядерных процессорах) с другими программами в трубе.
#!/bin/bash
section=""
insect=0
while read line
do if [ "$insect" -eq "1" ] || [ "x$(echo -e $line | grep '\[begin')" != "x" ]; then
insect=1
section="${section}${line}\n"
else
continue
fi
if [ "x$(echo -e $line | grep '\[end')" != "x" ]; then
if [ "x$(echo -e $section | grep 'header=7075')" != "x" ]; then
echo -e "$section"
fi
section=""
insect=0
fi
done < OutpdirImpressions.log
(лучшая производительность, чем bash)
#!/usr/bin/env python
section = ''
insect = False
with open('OutpdirImpressions.log', 'r') as f:
while True:
line = f.readline()
if line == '':
break
if insect or line.startswith('[begin'):
insect = True
section += line
else:
continue
if line.startswith('[end'):
if 'header=7075' in section:
print(section)
section = ''
insect = False
Я не уверен, что это вообще отвечает на ваш вопрос, т. е. интересуетесь ли вы «чем бы ни работает» или, скорее, в awk -специфическом ответе, но мне казалось, что вам нужен онлайнер (не то, чтобы эти примеры очень полезны):
python3 -c "import re; print(*[rec for rec in re.findall('(?ms)\[begin.*?(?=\[begin|\Z)', open('OutpdirImpressions.log.2013-09-02').read()) if 'header=7075' in rec])"
и для Python 2.6 или 2.7 (без «звездной» распаковки для всего, что я помню):
python -c "import re; print([rec for rec in re.findall('(?ms)\[begin.*?(?=\[begin|\Z)', open('OutpdirImpressions.log.2013-09-02').read()) if 'header=7075' in rec][0])"