Для этого можно использовать grep
:
grep 56896 file.txt
Если вы хотите написать сценарий, это может быть что-то вроде этого:
#!/bin/bash
inputfile='/path/to/file.txt'
grep "$1" "$inputfile"
Который вы затем запустите как:
$./script.sh 56896
Нестандартный подход
awk -F'_' -v OFS='_' '{
for (i=1; i<NF; i++) {
if ($i ~ /^[[:upper:]]/ && $(i+1) ~ /^[[:lower:]]/) {
print $i, $(i+1)
break
}
}
}' file
Параметр break
обеспечивает печать только первого совпадения.
$ grep -o '[[:upper:]][[:alpha:]]*_[[:lower:]][[:alpha:]]*' file
Today_is
Doesnt_rain
Like_rainy
Это извлекает любую строку, начинающуюся с прописной буквы, за которой следует любое количество букв алфавита, затем символ подчеркивания, за которым следует строчная буква и (, возможно, )больше букв алфавита.
Вышеупомянутое, однако, извлекло бы несколько совпадений в строке, если бы было несколько совпадений.
Следующая команда sed
не имеет этой проблемы (вместо этого она будет вытягивать последнюю такую строку в каждой строке):
$ sed -n 's/.*\([[:upper:]][[:alpha:]]*_[[:lower:]][[:alpha:]]*\).*/\1/p' file
Today_is
Doesnt_rain
Like_rainy
С реализацией grep
с поддержкой PCRE и-o
:
$ grep -P -o '(?<![^_])\p{Lu}[^_]*_\p{Ll}[^_]*' < your-file
Today_is
Doesnt_rain
Like_rainy
(вы можете заменить grep -P
на pcregrep
, если ваш grep
не поддерживает-P
).
Это u
строчная буква L
, за которой следует 0 или более не-_
с, за которыми следует _
, l
строчная L
строчная буква и другая последовательность из 0 или более не-_
s, все это соответствует только при условии, что оно не следует за не -_
(, то есть следует за _
или началом строки ).
Каждое совпадение будет напечатано на отдельной строке. Чтобы ограничить его первым совпадением в каждой строке, вы можете использовать другой подход:
grep -P -o '^(.*?_)??\K\p{Lu}[^_]*_\p{Ll}[^_]*' < your-file
Для последнего совпадения в каждой строке то же самое, но с использованием жадной версии операторов для части, которая съедает начальную часть:
grep -P -o '^(.*_)?\K\p{Lu}[^_]*_\p{Ll}[^_]*' < your-file
sed 's/.*\([A-Z][^_]*_[a-z][^_]*\).*/\1/' <your-file
РЕДАКТИРОВАТЬ :жадный sed дайте последний матч. awk-решение для первого совпадения:
awk '{match($0,/([A-Z][^_]*_[a-z][^_]*)/,a); print a[1]}' <your-file