LINUX.ORG.RU

Прошу помочь с bash скриптом

 , ,


0

1

Привет! Только начал погружаться в мир linux и образовалась такая задача: найти в текущем каталоге слова «like» заменить на «unlike» и произвести вывод имён и размер отредактированных файлов в новый файл. Так понимаю необходимо использовать find и sed, но вот пока успехи не велики… Буду благодарен за помощь!

find . -type f -exec sed -i -e ‘s/like/unlike/g’ {} ; Вот вроде получилось, но как сделать сохранение в отдельный файл сведения об отредактированных файлах?

just4fun
() автор топика
Ответ на: комментарий от just4fun

напиши скрипт-обертку и передай его как аргумент exec. В самом скрипте вызывай sed и логгируй как тебе нужно.

moonmadness
()

Зависит от того, нужны ли тебе в итоговом файле имена всех файлов или только тех, в названии которых было произведено изменение. И не понятно, нужно ли фактическое изменение имен файлов или нужно произвести замену только в выводе.

find -type f -printf "%s %p\n" | sed 's/like/unlike/g' | tee 1.txt
exfx
()
Ответ на: комментарий от exfx

Только тех, в которых были произведены изменения (не в названиях файлов, а по тексту). То есть должен создаваться файл, в котором будут отображены названия и размер файлов, в которых были произведены изменения.

just4fun
() автор топика
Ответ на: комментарий от just4fun
find -maxdepth 1 -type f -name "*like*" -printf "%s %p\n" | sed 's/like/unlike/g' | tee 1.txt

Добавил ограничение по поиску только в текущей директории.

exfx
()
Ответ на: комментарий от just4fun

Как же приятно видеть у новичков, что, перед тем, как задать вопрос, человек сам что-то попробовал. Просто бальзам на душу.

В общем, респект тебе.

По поводу...

Только тех, в которых были произведены изменения (не в названиях файлов, а по тексту).

... комментом выше подсказали. -name "*like*" обеспечит поиск только файлов, в которых есть «like», а они всегда будут меняться. tee дублирует вывод в файл и на экран.

Kroz ★★★★★
()
Ответ на: комментарий от Kroz

Всем спасибо! Продолжаю дальше погружаться (или меня уже затягивает) в загадочный linux

just4fun
() автор топика
Ответ на: комментарий от Kroz

… комментом выше подсказали. -name "*like*" обеспечит поиск только файлов, в которых есть «like», а они всегда будут меняться. tee дублирует вывод в файл и на экран.

Погоди, я так понял, что имеется в виду не имя файла, а содержимое:

найти в текущем каталоге слова «like» заменить на «unlike»

То есть надо пройтись по всем файлам из каталога, найти те, в содержимом которых есть «like», и в них произвести замену. То есть:

Файл

$ cat penis.txt 
like
like
like

попадает под критерий, а вот такой:

$ cat like.txt 
penis
chlen
govno
zhopa

Не попадает

DELIRIUM ☆☆☆☆☆
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.