Пожалуйста, помогите с командой sed для захвата определенного текста

Это больше работа для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
0
08.02.2020, 02:00
2 ответа
sed -n 's/.*"key":"\([^"]*\)".*/\1/p' < your-file

Использование обычной идиомы :sed -n 's/pattern/replacement/p, которая выполняет sзамену и только pпечатает результирующее пространство шаблонов в случае успеха(nне печатает пространство шаблонов в конце каждого цикла, как это было бы без -n).

2
28.04.2021, 23:24

Предположим, что ваш входной файл содержит более 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
0
28.04.2021, 23:24

Теги

Похожие вопросы