Как игнорировать начальные пробелы в sed при замене?

Судя по тому, что вы пишете, кажется, что вам нужны не строки, передаваемые программе как одиночные аргументы, а как два аргумента :часть строки без кавычек как один, а следующая строка в кавычках как другой.

Если все эти строки следуют этому формату (и нет строк со строками в кавычках ), вы можете сделать что-то подобное в 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.

0
19.10.2021, 13:51
1 ответ

Вы должны дважды экранировать переменную 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
1
19.10.2021, 14:15

Теги

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