что за ~ функция в awk - PullRequest
       3

что за ~ функция в awk

0 голосов
/ 08 апреля 2020

Я сделал неверный тип в awk и получил неожиданный результат. Так что я запутался по этому поводу.

мой файл passwd имеет 39 строк.

# wc -l /etc/passwd

39 /etc/passwd

теперь «! ~» В awk показывает

# awk -F':' '$1 !~ /root/' /etc/passwd | wc -l

37

, в то время как ' ~! получил другой результат

# awk -F':' '$1 ~! /root/' /etc/passwd | wc -l

1

, после чего я удалил команду wc, чтобы посмотреть, какую строку он получил

# awk -F':' '$1 ~! /root/' /etc/passwd

vbirduser1:x:1000:1001::/home/vbirduser1:/bin/bash

Это первый обычный пользователь в моем Linux.

Итак, что за '~!' значит в awk?

1 Ответ

2 голосов
/ 08 апреля 2020

https://www.gnu.org/software/gawk/manual/html_node/Comparison-Operators.html

x! ~ Y Истинно, если строка x не соответствует регулярному выражению, обозначенному y

В вашем случае , awk -F':' '$1 !~ /root/' /etc/passwd напечатает все строки, которые первое поле не соответствует /root/, поэтому у вас есть 37 строк.

~! не является оператором. Выражение '$1 ~! /root/' делает две вещи:

  • !/root/: вычисляет $0 !~ /root/, если строка не содержит root, возвращает 1
  • $1 ~ !/root/: Я добавил пробелы между ними, чтобы было понятнее. Здесь мы проверяем, соответствует ли $1 результат предыдущего шага, (0 или 1)

vbirduser1 содержит 1, следовательно, он находится в выходных данных. Если у вас есть другие строки, в первом поле которых содержится 1 или 0, они также будут напечатаны в выходных данных.

Но мы должны избегать использования таких выражений, как в производственных кодах

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...