Вы можете использовать sed
для удаления пробелов, ведущих к последовательности ]]
:
sed 's/ *]]/]]/g' file.xml
Здесь регулярное выражение " *]]
" соответствует любому пробелу (" " )ноль или более раз ("
*
" ), за которым следует литерал " ]]
». Любые такие совпадения затем заменяются на «]]
». Результат записывается в stdout , где вы можете перенаправить его любым удобным способом.
Если у вас есть подходящая версия sed
, вы можете использовать " \s
" вместо " " для указания любого символа пробела (, т.е. не только пробелов, но также табуляции и другие непечатаемые -символы ).
В операторе sed лучше использовать двойные кавычки там, где этого требует использование переменных, а чтобы bash не интерпретировал восклицательный знак, а не расширял обратную косую черту, вы можете перейти к использованию read -r, что-то вроде этого:
while read -r pass do
#... code here...
done < <(sed -n "$startline,$endline"'{s/!/\x21/g;p}' "$wl_pass")
использование printf
или echo -e
с $pass внутри цикла должно возвращать восклицательные знаки