Нужен bash-скрипт

На самом деле это единственный раздел про unix на этом форуме

Модераторы: /dev/random, Модераторы разделов

linux81
Сообщения: 1
ОС: kubuntu

Нужен bash-скрипт

Сообщение linux81 »

Стоит задача: заменить во всех .txt файлах указанной директории одну фразу на другую
Спасибо сказали:
Аватара пользователя
Uncle_Theodore
Сообщения: 3339
ОС: Slackware 12.2, ArchLinux 64

Re: Нужен bash-скрипт

Сообщение Uncle_Theodore »

man awk
man sed
поиск по форуму
десять минут размышлений
результат.
Спасибо сказали:
Upliner
Сообщения: 67
ОС: openSUSE 11 / Debian Lenny

Re: Нужен bash-скрипт

Сообщение Upliner »

rename фраза1 фраза2 *.txt
От Кузбаса и до Затулинки, от вершин до глубиннейших руд
Анархисты Сибирской Республики нас к предельной свободе ведут
Спасибо сказали:
Аватара пользователя
Uncle_Theodore
Сообщения: 3339
ОС: Slackware 12.2, ArchLinux 64

Re: Нужен bash-скрипт

Сообщение Uncle_Theodore »

Upliner писал(а):
27.10.2007 00:23
rename фраза1 фраза2 *.txt

Ну и ахинею же Вы написали, друг мой... :)
Спасибо сказали:
Аватара пользователя
diesel
Бывший модератор
Сообщения: 5989
ОС: OS X, openSuSE, ROSA, Debian

Re: Нужен bash-скрипт

Сообщение diesel »

Upliner писал(а):
27.10.2007 00:23
rename фраза1 фраза2 *.txt

иногда лучше жевать ....

Код: Выделить всё

rename:

NAME
       rename - Rename files

SYNOPSIS
       rename from to file...


Код: Выделить всё

NAME
       rename - renames multiple files

SYNOPSIS
       rename [ -v ] [ -n ] [ -f ] perlexpr [ files ]
Спасибо сказали:
Upliner
Сообщения: 67
ОС: openSUSE 11 / Debian Lenny

Re: Нужен bash-скрипт

Сообщение Upliner »

Хммм... Не знал, что в сусе функция rename нестандартная... Мне вот очень помогает

Код: Выделить всё

RENAME(1)                       Linux Programmer's Manual                      RENAME(1)



 NAME
        rename - Rename files

 SYNOPSIS
        rename from to file...

 DESCRIPTION
        rename will rename the specified files by replacing the first occurrence of from in their name by to.
От Кузбаса и до Затулинки, от вершин до глубиннейших руд
Анархисты Сибирской Республики нас к предельной свободе ведут
Спасибо сказали:
Аватара пользователя
Uncle_Theodore
Сообщения: 3339
ОС: Slackware 12.2, ArchLinux 64

Re: Нужен bash-скрипт

Сообщение Uncle_Theodore »

Upliner, команда rename переименовывает файлы.
А не заменяет внутри текстовых файлов одну строку на другую.
Она меняет имя файла. Имя, сестра, имя. А не содержимое. Содержимое она не меняет, шерсть на носу. Вот если бы она меняла содержимое, то эта была бы та команда, которую хотел автор этого поста. А она не меняет содержимое, шерсть на носу, она только имя меняет... Поэтому автору темы она никак не поможет, шерсть на носу...
Спасибо сказали:
Upliner
Сообщения: 67
ОС: openSUSE 11 / Debian Lenny

Re: Нужен bash-скрипт

Сообщение Upliner »

Тьфу-ты, из контекста не понял, где менять надо, в имени, или в содержании... на этот случай нашлась команда replace, но она тоже нестандартная(вообще входит в пакет mysql)... выглядело бы как replace фраза1 фраза2 -- *.txt
Так что, если у товарища стоит MySQL, проблема решена...
От Кузбаса и до Затулинки, от вершин до глубиннейших руд
Анархисты Сибирской Республики нас к предельной свободе ведут
Спасибо сказали:
Аватара пользователя
diesel
Бывший модератор
Сообщения: 5989
ОС: OS X, openSuSE, ROSA, Debian

Re: Нужен bash-скрипт

Сообщение diesel »

Upliner писал(а):
27.10.2007 01:42
Хммм... Не знал, что в сусе функция rename нестандартная... Мне вот очень помогает

делает она стандартную вещь, но вызывается по разному. в некоторых убогих системах ее все еще не заменили более удобным perl-скриптом (:
Спасибо сказали:
Аватара пользователя
Folderx
Сообщения: 296
ОС: fedora, mandriva

Re: Нужен bash-скрипт

Сообщение Folderx »

Код: Выделить всё

echo test | sed s/"test"/"nest"/


bash скрипт, это скорее всего


Код: Выделить всё

#!/bin/bash

d_folder="$1"
file_list=`ls $d_folder/*.txt`

for f in $file_list
 do
  temp=`cat $f`
  echo "$temp" | sed s/"one"/"changed"/ >$f
 done

exit 0
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: Нужен bash-скрипт

Сообщение drBatty »

Folderx писал(а):
27.10.2007 23:57
bash скрипт, это скорее всего


Код
#!/bin/bash

угу

Код: Выделить всё

#!/bin/sed -f
s/фраза для поиска/фраза для замены/g
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
Аватара пользователя
SLEDopit
Модератор
Сообщения: 4823
Статус: фанат консоли (=
ОС: GNU/Debian, RHEL

Re: Нужен bash-скрипт

Сообщение SLEDopit »

Код: Выделить всё

find /path -maxdepth 1 -name "*.txt" -exec sed -i s/фраза для поиска/фраза для замены/g {} \;


ps упс не посмотрел на дату первого поста...
UNIX is basically a simple operating system, but you have to be a genius to understand the simplicity. © Dennis Ritchie
The more you believe you don't do mistakes, the more bugs are in your code.
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: Нужен bash-скрипт

Сообщение drBatty »

SLEDopit писал(а):
06.03.2010 02:25
find /path -maxdepth 1 -name "*.txt" -exec sed -i s/фраза для поиска/фраза для замены/g {} \;

почему нельзя запихать s/.../.../ в script.sed, а потом

Код: Выделить всё

./script.sed -i *.txt

?
SLEDopit писал(а):
06.03.2010 02:25
ps упс не посмотрел на дату первого поста...

а я - посмотрел :)
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
Аватара пользователя
SLEDopit
Модератор
Сообщения: 4823
Статус: фанат консоли (=
ОС: GNU/Debian, RHEL

Re: Нужен bash-скрипт

Сообщение SLEDopit »

drBatty писал(а):
06.03.2010 08:03
почему нельзя запихать s/.../.../ в script.sed, а потом
Я вижу в этом 2 препятствия:
1. Если нужно охватить txt файлы лежащие в поддиректориях, то необходимо совершать дополнительные телодвижения.
2. ИМХО, когда есть возможность не создавать лишних файлов со скриптами, я предпочитаю все сделать прямиком из командной строки (в пределах разумного, само собой разумеется).

А вообще, раз уж на то пошло, то можно обойтись и вовсе:

Код: Выделить всё

sed -i "s_---_///_g" *.txt
UNIX is basically a simple operating system, but you have to be a genius to understand the simplicity. © Dennis Ritchie
The more you believe you don't do mistakes, the more bugs are in your code.
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: Нужен bash-скрипт

Сообщение drBatty »

SLEDopit писал(а):
06.03.2010 16:35
Я вижу в этом 2 препятствия:
1. Если нужно охватить txt файлы лежащие в поддиректориях, то необходимо совершать дополнительные телодвижения.
2. ИМХО, когда есть возможность не создавать лишних файлов со скриптами, я предпочитаю все сделать прямиком из командной строки (в пределах разумного, само собой разумеется).

1) ага. но тут этого не надо.
2) согласен с вами. однако, ТС требовал скрипт - и вот ему скрипт (думаю без разницы, что не bash)
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали: