Вы можете сделать это в sed
следующим образом:
sed -n '/^80:82:87/ { s/;//g; y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/; p }'
-n
указывает sed
не печатать входные данные
, кроме когда это специально указано для этого. / ^ 80: 82: 87 /
сказано, что команды внутри фигурных скобок {…}
должны выполняться только в строках, начинающихся с 80:82:87
.
Это дает вам те же функции, что и grep
.
Никогда не нужно перенаправлять grep
в sed
или awk
. s /; // g
удаляет все точки с запятой в строке,
как вы сказали, что хотите.
Если вы имели в виду двоеточия, просто измените его на s /: // g
. y
преобразует все строчные (латинские / ASCII) буквы в прописные.
Если вам нужно только преобразовать MAC-адреса (и / или другие шестнадцатеричные значения),
вы можете обойтись с помощью y / abcdef / ABCDEF /
. @jasonwryan подтолкнул меня к пониманию того, что громоздкую команду y
можно заменить на s / [[: lower:]] / \ U & / g
, s / [[: alpha:]] / \ U & / g
,
или даже s /.*/ \ U & /
- но только если вы используя GNU sed.
\ U
, похоже, не определен в POSIX.
pass root_password | sudo --stdin --shell
succeeded. pass
напечатал пароль, sudo
прочитал его и запустил оболочку; вывод pass
завершился, что означает, что поток, используемый для вывода pass
и ввода оболочкой, был закрыт; оболочка успешно завершилась на EOF.
Последующие выполнения в пределах sudo
окна тайм-аута не требовали аутентификации, поэтому оболочка сама получила пароль и попыталась выполнить его как команду, выдав эту ошибку.
Ваш псевдоним не может работать, если вам нужен shell или для выполнения какой-либо команды, читающей из stdin (но он работает для команд, которые этого не делают). Вы могли бы создать псевдоним, который выполнял бы pass root_password | sudo --stdin true
, если хотите, а затем полагаться на таймаут для выполнения команд без пароля.
Вы также можете создать своего рода помощник askpass, который обеспечит нужное вам поведение. Он будет предоставлять пароль через pass
, когда попросит об этом sudo
.