Зануда ([info]3ahyga) wrote,
@ 2009-06-16 10:29:00
Previous Entry  Add to memories!  Tell a Friend  Next Entry
Entry tags:ИТ, баш, линукс

Замена строк в текстовом файле разом в линуксе...
# for i in $(find . -name "*mask*ext"); do sed -e 's/find/replace/' ${i} > "${i}.tmp"; mv "${i}.tmp" ${i}; done

ОБН: благодарствую ямофета.
# find . -name '*mask*ext' -exec sed -e 's/find/replace/' -i \{} \;




(11 comments) - (Post a new comment)


[info]iamphet
2009-06-16 08:57 am UTC (link)
а чё так сложно-то? если не надо идти в подкаталоги, то делается одной командой
sed -e '...' -i *mask*ext

а если надо идти в подкаталоги, то надо заменять "*mask*ext" на '*mask*ext', мне кажется,
или тупо писать, если глубина вложения известна: for i in * */*mask*ext */*/*mask*ext

(Reply to this) (Thread)


[info]iamphet
2009-06-16 08:59 am UTC (link)
да даже и с твоим подходом лучше все же писать
find . -name '*mask*ext' -exec sed -e '...' -i \{} \;

(Reply to this) (Parent)(Thread)


[info]3ahyga
2009-06-16 09:17 am UTC (link)
Нужно в подкаталоги закрадываться %)
Да. твой второй пример хорош, пожалуй выложу %)

(Reply to this) (Parent)


[info]3ahyga
2009-06-16 09:20 am UTC (link)
Да, не выходит каменный цветок-то, результаты в файл обратно не сохраняются....

(Reply to this) (Parent)(Thread)


[info]iamphet
2009-06-16 09:48 am UTC (link)
man sed на предмет опции -i
Если, конечно, у тебя действительно линукс, а не какой-то древний юникс с ископаемым sed.

(Reply to this) (Parent)(Thread)


[info]3ahyga
2009-06-16 10:57 am UTC (link)
уже, федора 8я, ну вот только что-то не справляет ничо %(

(Reply to this) (Parent)(Thread)


[info]iamphet
2009-06-17 11:50 am UTC (link)
Ну дык ищи проблему. Сначала проверь, как ищут нужные файлы: вместо -exec .... напиши -print

Потом проверь, правильно ли указана замена sed'у на каком-нибудь одном файле.

(Reply to this) (Parent)(Thread)


[info]3ahyga
2009-06-17 11:51 am UTC (link)
Дык, уместил, сед не впахивает, то есть находить-то находит, но не меняет!

(Reply to this) (Parent)(Thread)


[info]iamphet
2009-06-17 12:17 pm UTC (link)
ну а просто sed -e '...' somefile > tmpfile работает?

(Reply to this) (Parent)(Thread)


[info]3ahyga
2009-06-17 12:26 pm UTC (link)
да

(Reply to this) (Parent)


[info]infra_hdc
2009-06-17 07:22 pm UTC (link)
Если более строго выразиться -- то заменяется по идее только первое вхождение в строку слова find на слово replace. чтобы заменить все вхождения, надо писать s/find/replace/g
:-)

(Reply to this)


(11 comments) - (Post a new comment)

Create an Account
Forgot your login or password?
Login w/ OpenID
English • Español • Deutsch • Русский…