Распечатайте количество значений, которые имеют специальные символы в них

Вместо того, чтобы пытаться надежно скрыть свой пароль и пароль root от терминала, почему бы не использовать пару ключей ssh? Если вы запустите команду ssh-keygen, вы можете сгенерировать ключ crypto.pub, который, если вы поместите в файл /root/.ssh/authorized_keys каждого удаленного хоста, вы сможете просто выполнить вашу команду в таком виде: ssh root@1.1.1.1 "rm -rf tmp". Таким образом, Вам больше никогда не придется явно вводить свой пароль. Команда, если Вы хотите, также может быть добавлена в кронтаб и установлена по обычному расписанию, чтобы Вы могли проводить время, занимаясь другими делами. Все это в предположении, что машина, на которой вы генерируете ключ, только у вас есть доступ к учетной записи пользователя на машине, с которой вы генерируете ключ, не является общей учетной записью между пользователем sudo и пользователем, не являющимся пользователем sudo.

Если это поможет, но вам понадобится лучшее объяснение, дайте мне знать, и я постараюсь добавить больше информации в свой ответ.

Это может помочь, если вы никогда раньше не генерировали пару ключей: http://www.thegeekstuff.com/2008/11/3-steps-to-perform-ssh-login-without-password-using-ssh-keygen-ssh-copy-id/

1
11.04.2014, 13:02
3 ответа

Как упоминали другие, неясно точно , что вы хотите сделать, но синтаксис вашего подхода можно исправить следующим образом:

awk -F, '$2 ~ /^[$*&%#]+$/ { count++ } END {print count}' sample.txt
0
27.01.2020, 23:52

Есть много способов сделать это. Вы не указали этого в своем вопросе, но ваш подход awk пытается подсчитать те вторые поля, которые состоят полностью из специальных символов, так что это то, что делают и мои решения. Если это не то, что вам нужно, и вместо этого вы хотите считать поля, которые просто содержат хотя бы один специальный символ, удалите ^ и $ из операторов соответствия.

  1. awk:

    awk -F, '{if($2 ~ /^[$*&%#]+$/) cnt++;} END {print cnt}' sample.txt
    
  2. Perl:

    perl -F, -lane '$cnt++ if $F[1]=~/^[\$*&%#]+$/; END{print $cnt}' sample.txt
    
  3. grep (здесь предполагается, что всегда есть только 3 поля):

    grep -cP ',[\$*&%#]+,' sample.txt 
    
  4. Shell

    count=0;
    while IFS="," read one two three; do 
     [[ -z ${two##[\*&%\$#]*} ]] && let count++; 
    done < sample.txt; 
    echo $count
    
1
27.01.2020, 23:52

Как насчет этого

awk -F, '{if ($2 ~ /[^:alnum:]/) l=length($2);print $0" "l}' sample.txt
101,aaa,d01 
102,*&%,d02 3
103,$%&,d03 3
104,###,d04 3

Печатает в каждой строке счетчик «специальных символов», здесь символов, которые не являются alnum.

0
27.01.2020, 23:52

Теги

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