В сценарии Bash я пытаюсь вставить в файл замену символов между двумя заданными строками на 'X'. У меня есть группа строк, между которыми я хочу заменить символы на «X».
В приведенном ниже коде строка в паре объявляется в cpi_list массив. второй строка в паре всегда либо %26
или &
или ENDOFLINE
Замените все символы между двумя строками символом 'X', используя sed
Это то, что я делаю.
# list of "first" or "start" string
declare -a cpi_list=('%26Name%3d' '%26Pwd%3d')
# This is the "end" string
myAnd=\%26
newfile="inputlog.txt"
for item in "${cpi_list[@]}";
do
sed -i -e :a -e "s/\($item[X]*\)[^X]\(.*"$myAnd"\)/\1X\2/;ta" $newfile;
done
вход
CPI.%26Name%3dJASON%26Pwd%3dBOTTLE%26Name%3dCOTT
CPI.%26Name%3dVoorhees&machete
Я хочу, чтобы сделать его
CPI.%26Name%3dXXXXX%26Pwd%3dXXXXXX%26Name%3dXXXX
CPI.%26Name%3dXXXXXXXX&machete
PS: последний пункт должен также изменить %26Name%3dCOTT
к %26Name%3dXXXX
, даже если нет конца %26
, потому что я ищу для %26
в качестве конечной точки или END OF THE LINE
Но почему-то это не работает.
Какой результат * вы получаете? – chepner
% 3dCOTT, потому что он находится между% 26Name% 3d и концом строки. –
@chepner Этот результат я получаю 'CPI.% 26Name% 3dXXXXXXXXXXXXXXXXXXXX% 26Name% 3dCOTT' –