поведение grep с "\ n" в регулярном выражении - PullRequest
1 голос
/ 11 января 2020

Может кто-нибудь объяснить это поведение?

Я сопоставляю строку с шаблоном в 3 разных случаях.

Случай 1: В Java

Pattern pattern = Pattern.compile("^(b8|a8|8d){1,1}$"); #A dummy pattern
Matcher matcher = pattern.matcher("a8\n");  #A dummy string
boolean result = matcher.matches();

#result is false, which is expected

Случай 2: В JavaScript

var str = "a8\n";
var patt = /^(b8|a8|8d){1,1}$/g;
var result = str.match(patt);

#result prints nothing, again it's expected

Однако

Случай 3: (grep in bash )

[test@th3]$ grep -E '^(b8|a8|8d){1,1}$' <( printf 'a8\n'; )
a8
[test@th3]$

# it matches the 'a8'

В этом вопросе кто-то ответил, что $ представляет конец строки в REGEX, поэтому grep соответствует '\n' в случае 3, но почему не в другие случаи?

1 Ответ

2 голосов
/ 11 января 2020

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

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