Как заменить одну строку на другую в файле (Linux)
Устал я от долгих споров, давайте
Вот несколько способов, которые я знаю.
replace 'hello' 'bye, bye!' -- myfileСамое замечательное, что она умеет менять пары подстрок, что позволяет производить такие замены:
bolk-dev ~ $ echo ABBA | replace A B B A --
BAABВторой способ — создать временный файл, заменить в нём символы или подстроки
T=`/bin/tempfile`
sed 's/hello/bye, bye!/g' myfile > $T
mv $T myfileСразу в тот же файл записывать результат нельзя, операция „>“ сразу же откроет файл на запись и обнулит его. Поможет утилита sponge (входит в пакет moreutils):
sed 's/hello/bye, bye!/g' myfile | sponge myfileОна запишет stdin в файл разом, после того как все данные будут получены.
Добавлено: Азат в комментариях подсказывает, что можно воспользоваться ключом
sed -i 's/hello/bye, bye!/g' myfile
Комментарии 19
Тоже вполне себе
Потому что однострочники — это специализация Perl.
Ну и потому что там регекспы
Опять же,
perl -i.bak -pne 's/hello/bye, bye!/g' myfile
ничем не хуже
sed -i 's/hello/bye, bye!/g' myfile
А
ничем не хуже, кроме того что короче и sed быстрее
В Python можно записывать несколько команд не через перевод строки, а через точку с запятой: func1(); func2()
В блочных командах следующую можно ставить сразу после двоеточия: if x: func()
Вот так и решается.
А как это сделать с двумя файлами?
Тоесть есть два файла (СтарыеЛогины.txt, НовыеЛогины.txt) и надо взять старые логины из одного
файла и заменить их во втором. Доступен только bash и/или python.
Напишите программу на баше или пайтоне.
Но столкнулся с проблемой что не могу создать цикл, сейчас ищу как « склеить» два файла в третий.
Простите, но я не понимаю. Вы ждёте что я вам программу напишу?
В баше есть циклы, можно что угодно запустить в цикле. sed — тоже.