Решение:
perl -lane 'print "$F[0] $_" for /'\''phNAME'\'': '\''([^'\'']+)/g' input.txt
Вывод:(на основе вашего опубликованного входного файла)
ENSG00000268674 Dynamic changes
ENSG00000268674 Strong inhibition of secretion
ENSG00000215268 Dynamic changes
ENSG00000130538 Intracellular retention of SH4(YES)-mCherry
Пояснение:
Подробное объяснение будет предоставлено по запросу.
По моему опыту, perl
часто является наиболее подходящим инструментом для такого рода задач.
Код выглядит довольно беспорядочно из-за '\''
, который является просто экранированным '
.
Рекомендация:
Если можете, избегайте возиться с данными json
и анализируйте их с помощью jq
, как уже было разумно предложено.
На основе @ajgringo619
Это решает:
# includes complete left path
alias ll2='if [[ $(diff <(ls "$PWD" | sed "s|.*|$(ls -d "$PWD/")&|g") <(ls -d "$(pwd -P)/"*) | wc -l) == "0" ]]; then ls -l; else paste -d " -> " <(ls "$PWD" | sed "s|.*|$(ls -d "$PWD/")&|g") /dev/null /dev/null /dev/null <(ls -d "$(pwd -P)/"*); fi'
# or
alias ls2='if [[ $(diff <(ls "$PWD" | sed "s|.*|$(ls -d "$PWD/")&|g") <(ls -d "$(pwd -P)/"*) | wc -l) == "0" ]]; then ls -l; else paste -d " -> " <(ls "$PWD") /dev/null /dev/null /dev/null <(ls -d "$(pwd -P)/"*); fi'
Я добавил $(pwd -P)
в командную строку bash; это дает реальное имя папки вместо символической ссылки. Насколько я знаю, нет командного переключателя с ls
, который даст вам то, что вы хотите. Но, по крайней мере, изменение подсказки даст вам точное местоположение, в котором вы сейчас находитесь.