Похоже, было бы проще выразить с помощью awk
...
# awk -v _s="${_string}" '$3 == _s {print $3}' "${_path}"
## Above could be more _scriptable_ form of bellow example
awk -v _search="/just/do/it" '$3 == _search {print $3}' <<'EOF'
JET_FULE = /steal/beams
SHIA_LEBEOUF = /just/do/it
NEVER_GONNA = /give/you/up
EOF
## Either way, output should be similar to
## /just/do/it
-v _something="Some Thing"
бит позволяет передавать переменные Bash в awk
$3 == _search
бит сообщает awk
о соответствии, только если столбец 3
равен search
строке
- Для поиска подстроки в строке можно использовать
$0 ~ _search
{print $3}
бит сообщает awk
- print
столбец 3
для любых совпадений
И бит <<'EOF'
говорит Bash не расширять что-либо в пределах открывающих и закрывающих EOF
тегов
... однако, выше все равно будет выводить дубликаты совпадений, например. если yeet.d
как-то содержится ...
JET_FULE = /steal/beams
SHIA_LEBEOUF = /just/do/it
NEVER_GONNA = /give/you/up
AGAIN = /just/do/it
... было бы две /just/do/it
строки с awk
.
Самый быстрый способ обойти это было бы по каналу |
до head -1
, но способ лучше состоит в том, чтобы передать awk
до exit
после того, как ему было сказано print
.. .
_string='/just/do/it'
_path='yeet.d'
awk -v _s="${_string}" '$3 == _s {print $3; exit}' "${_path}"
... хотя теперь предполагается, что требуется только первое совпадение, получение n
th возможно, хотя в настоящее время выходит за рамки вопроса на момент последнего прочтения.
Обновление
To Отключение awk
по первому столбцу при печати третьего столбца и выход из первого совпадения может выглядеть следующим образом ...
_string='SHIA_LEBEOUF'
_path='yeet.d'
awk -v _s="${_string}" '$1 == _s {print $3; exit}' "${_path}"
... и обобщать еще дальше ...
_string='^SHIA_LEBEOUF '
_path='yeet.d'
awk -v _s="${_string}" '$0 ~ _s {print $3; exit}' "${_path}"
... потому что awk
полностью получает регулярных выражений, в основном .