Упрощенный подход с awk
awk '/R1/ {print "=>" $0;next} /R2/{print "*" $0;next} 1' text.file
[jaypal:~/Temp] cat text.file
R1 12 324 3453 36 457 4 7 8
R2 34 2342 2525 25 25 26 26 2 2
R3 23 2342 32 52 54 543 643 63
R4 25 234 2342 4 234242
[jaypal:~/Temp] awk '/R1/ { print "=>" $0;next} /R2/{print "*" $0;next}1' text.file
=>R1 12 324 3453 36 457 4 7 8
*R2 34 2342 2525 25 25 26 26 2 2
R3 23 2342 32 52 54 543 643 63
R4 25 234 2342 4 234242
[jaypal:~/Temp]
Выход шаблона {действие} операторы:
/R1/ { print "=>" $0;next}
: Это означает наличие строк /R1/
действие печати =>
будет сделан. next
остальная часть средств awk операторов будет проигнорирована, и на следующую строку посмотрят.
/R2/{print "*" $0;next}
: Это означает строки, соответствующие pattern /R2/
действие печати *
будет сделан. Когда awk
обработка запускается, первое pattern {action}
оператор будет проигнорирован как pattern /R1/
не будет верно для наличия строк /R2/
. Настолько второй pattern {action}
оператор будет сделанный на строке. next
снова означал бы, что мы больше не хотим обрабатывать и awk
должным образом перейдет к следующей строке.
1
печать все строки. Когда просто условие предоставляется без {action}
, значения по умолчанию awk к использованию {print}
. Здесь условие 1
который интерпретируется как верный, таким образом, это всегда успешно выполняется. Если мы добираемся до этой точки, это потому что первое и второе pattern {action}
операторы были проигнорированы или обойдены (для строк, не содержащих /R1/
и /R2/
), таким образом, действие печати по умолчанию будет сделано для остающихся строк.
Вы не можете ввести chroot с именем пользователя, которое не известно цели chroot среда. Скопируйте весь необходимый файл для аутентификации пользователя к каждому chroot: /etc/passwd
, /etc/shadow
, /etc/nsswitch.conf
, и, в конечном счете все файлы в /etc/pam.d/*
. Я
su --command 'sg $group -c "$command"' $user
или запишите сценарий обертки, который работает в chroot. – eppesuig 16.03.2013, 09:56