Мой файл содержит следующий текст

xyz.com       123  321
xyz.com.br    123  123
abcd.xyz.com  123  321

Я хочу использовать строку, содержащую только xyz.com. т.е. на выходе должна быть первая строка.

 xyz.com   123  321

Попробовал следующее, но безрезультатно.

grep "^xyz.com$" file.txt
grep '^xyz.com$' file.txt
grep -w xyz.com file.txt
grep '^xyz.com$' file.txt
grep '^xyz\.com$' file.txt
grep -Fx xyz.com file.txt
grep -w 'xyz.com' file.txt
grep -w 'xyz\.com' file.txt
grep '\sxyz.com\s' file.txt
grep '\bxyz.com\b' file.txt
grep "\bxyz.com\b" file.txt
grep "\<xyz.com\>" file.txt
grep '\<xyz.com\>' file.txt
grep -w -l "xyz\.com" file.txt
grep -w "xyz\.com" file.txt
grep -wF "xyz\.com" file.txt
grep -w "xyz\.com$" file.txt
grep -w "xyz\.com\$" file.txt

Shell это Баш. Благодарю.

2 ответа2

0

В вашем примере строка не содержит только xyz.com, она содержит больше столбцов с числами. Вот почему '^xyz\.com$' не работает. Пытаться:

grep '^xyz\.com\s' file.text

Добавленные \s в конце выражения приводят к пробелу сразу после искомой строки и разрешают другой текст после.

Чтобы включить регистр строки, содержащей только строку поиска, попробуйте:

grep '^xyz\.com\(\s.*\)\?$' file.txt

Это позволит конец строки сразу после строки, но в любом другом случае потребуется пробел.

См regular-expressions.info для получения дополнительной информации о регулярных выражениях.

0
$ grep '^xyz\.com[[:space:]]' file.txt
xyz.com      123 321
$ grep -P '^xyz\.com\s' file.txt
xyz.com      123 321

Первый использует способ сопоставления пробелов POSIXy, второй использует способ perly, что означает, что вам нужно указать с помощью -P регулярные выражения perl.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .