Судя по тому, что вы пишете, кажется, что вам нужны не строки, передаваемые программе как одиночные аргументы, а как два аргумента :часть строки без кавычек как один, а следующая строка в кавычках как другой.
Если все эти строки следуют этому формату (и нет строк со строками в кавычках ), вы можете сделать что-то подобное в Bash:
#/bin/bash
while IFS=" " read -r a b; do
b=${b%\'};
b=${b#\'};
/opt/report -filesystem "$a" "$b" -detail
done < objects.lst
read
разбивает строку на две части в первом пробеле и сохраняет части в a
и b
. Затем b=${b%\'}; b=${b#\'};
удалите одинарные кавычки, а затем обе строки передаются как отдельные аргументы в /opt/report
.
Вы должны дважды экранировать переменную source1
и использовать одинарные кавычки:
$ source1='LogFormat \\\"%h \\\\"%r\\\\" %>s %b\\\" common'
$ sed "s|$source1|$destination1|" file
Access /var/tmp/access.log
LogFormat "%T %h \"%r\" %>s %b" common
Error /var/tmp/err.log
С\s
(в GNUsed
):
$ sed "s|^\s*$source1|$destination1|" file
Access /var/tmp/access.log
LogFormat "%T %h \"%r\" %>s %b" common
Error /var/tmp/err.log