Многострочная подстановка sed перезаписывает предыдущий вывод

Для этой проблемы я использовал простой и грубый метод, переименовав имя поля в пароль, причина этого в том, что я использую программное обеспечение Mac navicat premium в визуальной ошибке операции: Неизвестный столбец «пароль» в «Список полей» ', само программное обеспечение использует пароль, так что я не могу легко работать. Поэтому я выполняю root в командной строке базы данных, запускаю

Use mysql;

И затем изменяю имя поля:

ALTER TABLE user CHANGE authentication_string password text;

В конце концов, нормально.

1
13.04.2017, 15:36
1 ответ

Ваша команда работает для меня:

$ sed -r '/user-type/{N;s/user-type: (.*)\n.*gth: .*([0-9]+).*$/\1 \2/}' file.txt
admin 8
auth 8

Однако, если преобразовать ввод в формат DOS, я получу вывод, который вы видите:

$ sed -r '/user-type/{N;s/user-type: (.*)\n.*gth: .*([0-9]+).*$/\1 \2/}' <(sed 's/$/\r/' <file.txt)
 8min
 8th

Одно из решений - преобразовать ваш входной файл в окончание строки в стиле unix.

Другое решение - настроить команду sed таким образом, чтобы она допускала использование символов \ r :

$ sed -r '/user-type/{N;s/user-type: (.*)\n.*gth: .*([0-9]+).*$/\1 \2/; s/\r//}' <(sed 's/$/\r/' <file.txt)
admin 8
auth 8

Или:

$ sed -r '/user-type/{N;s/user-type: ([^\r]*).?\n.*gth: .*([0-9]+).*$/\1 \2/}' <(sed 's/$/\r/' <file.txt)
admin 8
auth 8
1
27.01.2020, 23:47

Теги

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