Я думаю, что проще всего использовать sed с опцией -r
-r, --regexp-extended
use extended regular expressions in the script
, чтобы избежать необходимости использовать много выражений с обратной косой чертой:
sed -r 's/(\\)(username)(:VAS:)/\1\2:\2_tst:/'
Тест:
$> echo "ENTP\username:VAS:1749078453:1749078453::/home/username:/bin/bash" | sed -r 's/(\\)(username)(:VAS:)/\1\2:\2_tst:/'
ENTP\username:username_tst:1749078453:1749078453::/home/username:/bin/bash
Так что теперь со своим файлом вы можете сделать:
cat password_file | sed -r 's/(\\)(username)(:VAS:)/\1\2:\2_tst:/'
или:
sed -r 's/(\\)(username)(:VAS:)/\1\2:\2_tst:/' < password_file
Если это выглядит хорошо, вы можете сделать:
sed -r 's/(\\)(username)(:VAS:)/\1\2:\2_tst:/' < password_file > out_file