bash-скрипт подсчета строк

Это достаточно известное и задокументированное поведение. Если у вас есть разные пользователи на стороне сервера и на стороне клиента, которые используют одни и те же uid, файлы будут отображаться как имеющие разных владельцев.

Помимо общих файлов, рекомендуется позаботиться о сопоставлении пользователей с одним и тем же идентификатором на всех машинах, использующих одни и те же файловые системы.

Можно сделать это вручную, какой-нибудь минимальной системой автоматизации/сценариев, а еще лучше, или настроить централизованную аутентификацию, например, с помощью LDAP. см. Централизованная аутентификация с использованием OpenLDAP

0
31.03.2020, 12:41
2 ответа

Это должно делать то, что вы хотите:

$ var=$(( $(grep -m1 -n 'Firmware state: Rebuild' file | cut -d: -f1) -1 ))
$ echo $var
14      

Пояснение

  • grep -m1 -n 'Firmware state: Rebuild':это будет искать первую(-m 1)строку, соответствующую Firmware state: Rebuild, и печатать эту строку, включая ее номер строки(-n):

    $ grep -m1 -n 'Firmware state: Rebuild' file 
    15:Firmware state: Rebuild
    
  • cut -d: -f1:вывод grepвыше затем передается по конвейеру через этот cut, который принимает :в качестве разделителя полей и печатает первое поле, номер строки.*var=$(( $(command) -1 )):Конструкция $(( ))позволяет выполнять математические операции. Например:

    $ echo $((10-2))
    8
    

    Конструкция $(command)позволяет нам использовать вывод команды, как если бы это была переменная. Итак, $(( $(command) -1 ))напечатает результат вычитания 1 из вывода command. Поскольку commandздесь — это grep | cutвыше, чьим выводом является номер строки (15), это сохранит номер строки минус один как $var.


Обратите внимание, что приведенное выше решение также будет соответствовать строке типа Firmware state: Rebuild againили любой другой строке, содержащей Firmware state: Rebuildв качестве подстроки.Если вам нужно убедиться, что он совпадает только тогда, когда вся строка не содержит ничего, кроме Firmware state: Rebuild, используйте вместо этого:

var=$(( $(grep -xm1 -n 'Firmware state: Rebuild' file | cut -d: -f1) -1 ))
5
19.03.2021, 02:31

Сawk:

$ var=$(awk '$0=="Firmware state: Rebuild"{print --NR; exit}' file)
$ echo "$var"
14

Сценарий awkпечатает номер входной записи минус 1, когда текущая строка равна Firmware state: Rebuild, и завершает работу сценария. Результат подстановки команды $(...)затем присваивается переменной var.

7
19.03.2021, 02:31

Теги

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