Это больше работа дляperl
:
perl -pe 's/"#\K.*?(\d+)\.djvu(?=")/$1+1/ge' <file
С переменной:
INCR=1 perl -pe 's/"#\K.*?(\d+)\.djvu(?=")/$1+$ENV{INCR}/ge' <file
Или:
perl -spe 's/"#\K.*?(\d+)\.djvu(?=")/$1+$incr/ge' -- -incr=1 <file
sed -n 's/.*"key":"\([^"]*\)".*/\1/p' < your-file
Использование обычной идиомы :sed -n 's/pattern/replacement/p
, которая выполняет s
замену и только p
печатает результирующее пространство шаблонов в случае успеха(n
не печатает пространство шаблонов в конце каждого цикла, как это было бы без -n
).
Предположим, что ваш входной файл содержит более 1 пары имен -значений, рассмотрите это:
$ awk -F'":"' '{gsub(/^[[:space:]]*"|"[[:space:]]*$/,""); f[$1]=$2} END{print f["key"]}' file
JIRA-90
Этот подход позволяет вам заполнить массив(f[]
выше )сопоставлениями имен и значений, а затем вы можете просто печатать значения по их именам, когда захотите.
$ cat file
"foo":"127"
"key":"JIRA-90"
"bar":"hello world"
$ awk -F'":"' '{gsub(/^[[:space:]]*"|"[[:space:]]*$/,""); f[$1]=$2} END{print f["bar"], f["key"]}' file
hello world JIRA-90
$ awk -F'":"' '{gsub(/^[[:space:]]*"|"[[:space:]]*$/,""); f[$1]=$2} END{print f["foo"] * 3}' file
381
$ awk -F'":"' '{gsub(/^[[:space:]]*"|"[[:space:]]*$/,""); f[$1]=$2} END{for (i in f) print i "=" f[i]}' file
key=JIRA-90
foo=127
bar=hello world