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