Как передать переменную в sed "$ (sed -n '/ 110600002019 / =' tmuser.cf | tail -n 1)" 's / 110600002019/120700002019 /' tmuser.cf - PullRequest
1 голос
/ 06 ноября 2019

Я хочу, чтобы переменная передавалась, как показано ниже. a = 110600002019 b = 120700002019

  sed "$(sed -n '/$a/ =' tmuser.cf | tail -n 1)" 's/$a /$b/' tmuser.cf

1 Ответ

1 голос
/ 06 ноября 2019
sed "$(sed -n "/$a/ =" tmuser.cf | tail -n 1) s/$a /$b/" tmuser.cf

Работал на меня. Я сделал небольшой тестовый файл

cat tmuser.cf
a
110600002019
b
c
120700002019

Не был уверен насчет 120700002019, поэтому я поместил его в файл.

Выходные данные из приведенного выше сценария:

a
120700002019
b
c
120700002019

Обратите внимание, что вы можете многому научиться для отладки подобной проблемы, обернув свою команду с помощью

set -vx ; ... your cmnds .... ; set +vx

Это дало первую подсказку

sed "$(sed -n '/$a/ =' tmuser.cf | tail -n 1)" 's/$a /$b/' tmuser.cf
1 >sed -n '/$a/ =' tmuser.cf
1 >tail -n 1
1 >sed '' 's/$a /$b/' tmuser.cf
sed: s/$a /$b/: cannot open [No such file or directory]    
a
110600002019
b
c
120700002019

Ни одна из переменныхзаменяются их значениями. Вам нужно использовать dbl-кавычки для замены переменных.

И сообщение об ошибке

sed: s/$a /$b/: cannot open [No such file or directory]  

говорит нам, что sed считает, что s/$a /$b/ - это имя файла, а не команда,Все команды должны отображаться как одна непрерывная строка в оболочке, которая передает их sed, поэтому обратите внимание, как я изменил

...| tail -n 1)" 's/$a /$b/'...

на

...|  tail -n 1)  s/$a /$b/"....

IHTH

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...