Моят блог в Blog.bg
Постинги в блога от Май, 2008 г.
13.05.2008 22:45 -
Хитрини със sed (замяна на стринг във всички файлове)
Преди 7 години видях Линукс.
Бях потресен :) Първата ми реакция на конзолата и непонятните 2-3 буквени команди ми бе
"Абе ние в ДОС ли ще се върнем?"
Реакция на лаик ;)
Сега не спирам да се учудвам на хитрините, които могат да се правят лесно и интуитивно.
Спестяват много нерви и време. Днес ми излезе един проблем - да заменя една функция с друга в няколко сорса. Е под Уиндоус си е китайска работа. Обърнах се към конзолата на SLES. Малко се замислих, написах цикъл, хванах файловете които ми трябват и взех да разсъжавам как с grep да го направя, като осъзнавах, че няма да стане. Чичо Гугъл ми помогна - на първа страница още в търсачката имаше "ежедневни трикове със sed". Ами да, знам Станиславе, че все ми казваш "awk и sed са голямата работа" ама от работа все не остава време да се почете. Ето, че сега ми се наложи и хватката стане еУегантно:
#!/bin/sh
# подмяна на стринг $1 със $2 във всички файлове
# употреба: replace "ненужен стринг" "нов стринг" file [file...]
OLD=$1 # първи параметър
NEW=$2 # втори параметър
shift ; shift # отпадат двата параметъра, за да остане 3-я - файловете
for file in $* # трика е това - всички файлове
do
# подмяна на стригн OLD с NEW и изход в нов файл
sed "s/$OLD/$NEW/g" ${file} > ${file}.new
# преименуване (с преместване, което го няма в Уин) на новия файл като първоизточника
/bin/mv ${file}.new ${file}
done
Ами, done :)
Бях потресен :) Първата ми реакция на конзолата и непонятните 2-3 буквени команди ми бе
"Абе ние в ДОС ли ще се върнем?"
Реакция на лаик ;)
Сега не спирам да се учудвам на хитрините, които могат да се правят лесно и интуитивно.
Спестяват много нерви и време. Днес ми излезе един проблем - да заменя една функция с друга в няколко сорса. Е под Уиндоус си е китайска работа. Обърнах се към конзолата на SLES. Малко се замислих, написах цикъл, хванах файловете които ми трябват и взех да разсъжавам как с grep да го направя, като осъзнавах, че няма да стане. Чичо Гугъл ми помогна - на първа страница още в търсачката имаше "ежедневни трикове със sed". Ами да, знам Станиславе, че все ми казваш "awk и sed са голямата работа" ама от работа все не остава време да се почете. Ето, че сега ми се наложи и хватката стане еУегантно:
#!/bin/sh
# подмяна на стринг $1 със $2 във всички файлове
# употреба: replace "ненужен стринг" "нов стринг" file [file...]
OLD=$1 # първи параметър
NEW=$2 # втори параметър
shift ; shift # отпадат двата параметъра, за да остане 3-я - файловете
for file in $* # трика е това - всички файлове
do
# подмяна на стригн OLD с NEW и изход в нов файл
sed "s/$OLD/$NEW/g" ${file} > ${file}.new
# преименуване (с преместване, което го няма в Уин) на новия файл като първоизточника
/bin/mv ${file}.new ${file}
done
Ами, done :)