Точное совпадение слова в строке - Unix - PullRequest
0 голосов
/ 23 декабря 2019

Я пытаюсь определить точное совпадение строки в строке. Но не удалось получить фактический требуемый результат.

Линия

# file: /test/test1 # owner: own # group: accnt group::--x other::r-x default:user::rwx default:group::r-x default:mask::r-x default:other::r-x  user:an:rw-

Шаблон

user::rwx

Команда

echo "# file: /test/test1 # owner: own # group: accnt group::--x other::r-x default:user::rwx default:group::r-x default:mask::r-x default:other::r-x  user:an:rw-" | grep -w "user::rwx" | wc -l

Ожидаемый результат

0

Фактический вывод

1

Другие варианты опробованы

echo "# file: /test/test1 # owner: own # group: accnt group::--x other::r-x default:user::rwx default:group::r-x default:mask::r-x default:other::r-x  user:an:rw-" | fgrep -x "user::rwx" | wc -l

echo "# file: /test/test1 # owner: own # group: accnt group::--x other::r-x default:user::rwx default:group::r-x default:mask::r-x default:other::r-x  user:an:rw-" | grep -Eo "user::rwx" | wc -l

echo "# file: /test/test1 # owner: own # group: accnt group::--x other::r-x default:user::rwx default:group::r-x default:mask::r-x default:other::r-x  user:an:rw-" | grep -wo "user::rwx" | wc -l

Ответы [ 3 ]

2 голосов
/ 23 декабря 2019

Можете ли вы попробовать приведенную ниже команду и посмотреть, работает ли она для всех сценариев, которые вы ищете. echo .. | grep -oP '\suser::rwx\s' | wc -l

2 голосов
/ 23 декабря 2019

РЕДАКТИРОВАТЬ: Если вы хотите напечатать строки с точными словами, попробуйте выполнить следующее.

var="user::rwx"
awk -v var="$var" 'match($0,var){count++} END{print count}' Input_file


Не могли бы вы, пожалуйстапопробуйте следующее. В случае любого точного совпадения, найденного в любой строке вашего файла, будет напечатано 0.

var="user::rwx"
awk -v var="$var" 'match($0,var){print substr($0,RSTART,RLENGTH)}' Input_file

ИМХО, почему код OP не работает, так как OP использует команду wc, которая выдаст количество строк ввыводится, но выглядит как будто OP хочет напечатать 0 когда совпадение найдено (если я не ошибаюсь)

0 голосов
/ 23 декабря 2019

Ваша строка содержит упомянутое слово, в этой части:

default:user::rwx

Вы упоминаете, что не хотите этого (следует учитывать только ту часть, где user::rwx в целом)так почему бы просто не добавить начальный пробел в ваш grep, например, так:

echo ... | grep -w " user::rwx" | wc -l    # mind the space in front of "user"

(я пробовал это на моей подсистеме Ubuntu, и, похоже, это помогает)

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