awk
обрабатывает каждую запись (по умолчанию запись - это строка) отдельно - для применения условий, охватывающих соседние строки, можно использовать функцию getline
для чтения следующей записи и проверки ее на соответствие второму шаблону:
awk '/patterna/ {
a=$0
if (getline > 0 && $0 ~ /patternb/) {
print a
print
}
}' inputfile
В качестве альтернативы можно использовать sed
sed -n '/patterna/ {$!N; /\npatternb/p}' inputfile
Если вы хотите выводить первое совпадение /patternb/
после каждого совпадения /patterna/
, предшествующее его /patterna/
, то вы можете сделать stateful синтаксический анализатор, устанавливая флаг при каждом совпадении /patterna/
и снимая его при каждом /patternb/
:
awk '
/patterna/ {
a=1; lasta=$0; next;
}
/patternb/ && a==1 {
a=0; print lasta; print;
}' inputfile
На многих установках, оболочка входа для пользователя Jenkins установлена на false
или nologin
:
$ grep jenkins /etc/passwd
jenkins:x:495:441:Jenkins Continuous Integration Server:/var/lib/jenkins:/bin/false
Поэтому, если вы попытаетесь войти в систему как пользователь Jenkins или переключитесь на него, система не позволит этого.
Лучший способ обойти это - запустить оболочку с использованием пользователя Jenkins:
$ sudo su - jenkins -s/bin/bash
-bash-4.1$ whoami
jenkins
-bash-4.1$ echo $HOME
/var/lib/jenkins
-bash-4.1$
-bash-4.1$ cd .ssh
-bash-4.1$ pwd
/var/lib/jenkins/.ssh
-bash-4.1$
Я использую этот метод для установки ключей SSH, к которым я хочу, чтобы мой сервер jenkins имел доступ на уровне CLI.
Если вы хотите войти как Дженкинс, вы можете сделать это с помощью
sudo su -s /bin/bash jenkins