Как сделать фильтр более эффективным

Вы можете заставить bash быть выполнен как интерактивная оболочка. Попробуйте эту команду:

sudo -iu someuser /bin/bash -i -c '$NODE_PATH $FULL_PATH/$FILE_NAME \
>> /var/log/$PROGRAM_NAME.sys.log 2>&1'

Теперь, перед выполнением вашей команды, ~/.bashrc и /etc/bash.bashrc исходят от bash. Это то же самое поведение, что и при открытии терминала.

1
06.01.2015, 01:28
2 ответа

Я не знаю, будет ли оно более эффективно, но вы могли бы сделать это полностью в awk :

awk -F': *' '$1 == "Name" {name = $2; next}; 
$0 == "Account disabled (or locked): TRUE" {
   print gensub(/.*\\/, "", 1, name)
}'
1
27.01.2020, 23:51

Просто сделайте это с помощью sed , раз уж вы все равно его используете:

/opt/util/enum-users --level 2 |
sed -n '/^Name:/h;//,/^Account/{
    /^Account/!d;/TRUE[^:]*$/!d;g
    s/^[^:]*:[[:blank:]]*//p
}' 

На самом деле я не знаю, как бизнес [[: blank:]] должен быть обработан, но сделанное выше предположение состоит в том, что интересная группа строк, вероятно, будет начинаться как:

^Name:[[:blank:]]*[INFORMATION YOU WANT]$

... и что следующая встречающаяся строка, начинающаяся с строка Учетная запись должна заканчиваться строкой TRUE , за которой следует любое количество пробелов, и что неинтересная группа, вероятно, будет иметь FALSE или что-то в этом роде.

0
27.01.2020, 23:51

Теги

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