LinuxForum.Fans
Тема

замена имени файлов в при помощи текстового редактора sed

Автор: Ella 9 сообщений 2343 просмотров
#29151

Помогите пожалуйста заменить имена файлов a1, a2, a3 на с1, с2, с3 с помощью sed. Только напрямую им не сделаешь... Помогите написать на баше, чтобы потом выполнить через sed :(

#29171
text
system@ad43568:~$ mkdir TEST
system@ad43568:~$ cd TEST/
system@ad43568:~/TEST$ touch {a1,a2,a3}
system@ad43568:~/TEST$ ls
a1  a2  a3
system@ad43568:~/TEST$ rename 's/a/c/gi' *
system@ad43568:~/TEST$ ls
c1  c2  c3
system@ad43568:~/TEST$ 
#29181

не знал...
Только это не sed кажись, это perl :-). Стало интересно, даже погуглил немного но на вскидку не нашёл. Подумал, что ведь каталог в Unix это список файлов, вот и подумал, может его можно как нибудь открыть как файл в редакторе? А значит и в sed.

#29202

Ella, как просили, объясню что это:

system-root написал:
system@ad43568:~$ mkdir TEST
system@ad43568:~$ cd TEST/

здесь понятно, я просто каталог создал, чтоб у себя не мусорить.

system-root написал:
system@ad43568:~/TEST$ touch {a1,a2,a3}

touch изменяет время последнего доступа и/или время последней модификации каждого заданного файла. - так гласит man touch
при этом если файл не существует, он создается. а раз мне нужно создать 3 файла, вместо того, чтоб писать подряд в терминале

text
touch a1
touch a2
touch a3

я всё это создал одной строкой: touch {a1,a2,a3}

system-root написал:
system@ad43568:~/TEST$ rename 's/a/c/gi' *

здесь используется регулярное выражение с синтаксисом sed, сам sed вряд ли умеет переименовывать файлы, я по крайней мере не умею, значит нужна другая программа, например mv или rename.
и того как видим результат, файлы переименованы, если этой функции достаточно и вам не критично (не задание по учебе) то пользуйтесь так:
rename 's/что заменяем/на что/gi' шаблон имён файлов, звёздочка означает вообще всё, что найдется в каталоге.

#29208

Спасибо, но не то, что мне надо. Мне надо обязательно через sed, а так как через sed нет такой команды, я говорила о скрипте на баше, который можно поместить в файл и прочитать из файла через sed.

#29213
text
     #!/bin/bash
     # renames.sh
     # простая программа переименования

criteria=$1 re_match=$2 replace=$3 for i in $( ls *$criteria* ); do src=$i tgt=$(echo $i | sed -e "s/$re_match/$replace/") mv $src $tgt done

#29217

Hvzh, sed: файл example строка 9: неизвестная команда: `f'

#29223
Ella написал:
Мне надо обязательно через sed

Ella, так и говорите, мол "здрасте, мне по учебе надо, а не для своих нужд"
в скрипте Hvzh, нет неизвестных для линукса строк, проверьте драйвер мыши, он у вас плохо копирует.

#29224
system-root написал:
[quote=Ella]Мне надо обязательно через sed

Ella, так и говорите, мол "здрасте, мне по учебе надо, а не для своих нужд"
в скрипте Hvzh, нет неизвестных для линукса строк, проверьте драйвер мыши, он у вас плохо копирует.[/quote]
В скрипте убрала звездочки, где путь прописывается, задала параметры- стало работать, правда выводит много ненужного мусора параллельно.

Ну так я писала, что через sed надо в самом начале, если бы было не принципиально, то не уточняла бы, дабы не загружать лишней информацией. Всем спасибо.

Войдите или зарегистрируйтесь, чтобы ответить.