sed замените ha sh другим ha sh в файле - PullRequest
0 голосов
/ 16 апреля 2020

допустим, у меня есть файл в следующем формате:

name type 3425sdfsg125 url

между каждой записью (т.е. именем и типом) - это переменное количество пробельных символов.

Я хочу замените значение ha sh 3425 ... другим значением ha sh, которое хранится в переменной $ {hash}:

hash=48956sdglj23

результат должен быть:

name type 48956sdglj23 url

как можно было бы сделать такую ​​вещь, используя sed?

Ответы [ 2 ]

0 голосов
/ 17 апреля 2020

Надежно с GNU sed:

$ echo 'name    type   3425sdfsg125    url' |
    sed -E 's/^(\s*name\s+type\s+)\S+(\s+url\s*)$/\1'"$hash"'\2/'
name    type   48956sdglj23    url

и любым POSIX sed:

$ echo 'name    type   3425sdfsg125    url' |
    sed 's/^\([[:space:]]*name[[:space:]]\{1,\}type[[:space:]]\{1,\}\)[^[:space:]]\{1,\}\([[:space:]]\{1,\}url[[:space:]]*\)$/\1'"$hash"'\2/'
name    type   48956sdglj23    url
0 голосов
/ 16 апреля 2020

Насколько я понимаю, у вас нет точного значения для замены? Это работает?

sed -i "s/y   .* z/y   $hash z/g" foo
...