Помогите пожалуйста заменить имена файлов a1, a2, a3 на с1, с2, с3 с помощью sed. Только напрямую им не сделаешь... Помогите написать на баше, чтобы потом выполнить через sed :(
замена имени файлов в при помощи текстового редактора sed
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$
не знал...
Только это не sed кажись, это perl :-). Стало интересно, даже погуглил немного но на вскидку не нашёл. Подумал, что ведь каталог в Unix это список файлов, вот и подумал, может его можно как нибудь открыть как файл в редакторе? А значит и в sed.
Ella, как просили, объясню что это:
system@ad43568:~$ mkdir TEST
system@ad43568:~$ cd TEST/
здесь понятно, я просто каталог создал, чтоб у себя не мусорить.
system@ad43568:~/TEST$ touch {a1,a2,a3}
touch изменяет время последнего доступа и/или время последней модификации каждого заданного файла. - так гласит man touch
при этом если файл не существует, он создается. а раз мне нужно создать 3 файла, вместо того, чтоб писать подряд в терминале
touch a1
touch a2
touch a3я всё это создал одной строкой: touch {a1,a2,a3}
system@ad43568:~/TEST$ rename 's/a/c/gi' *
здесь используется регулярное выражение с синтаксисом sed, сам sed вряд ли умеет переименовывать файлы, я по крайней мере не умею, значит нужна другая программа, например mv или rename.
и того как видим результат, файлы переименованы, если этой функции достаточно и вам не критично (не задание по учебе) то пользуйтесь так:
rename 's/что заменяем/на что/gi' шаблон имён файлов, звёздочка означает вообще всё, что найдется в каталоге.
Спасибо, но не то, что мне надо. Мне надо обязательно через sed, а так как через sed нет такой команды, я говорила о скрипте на баше, который можно поместить в файл и прочитать из файла через sed.
#!/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
Hvzh, sed: файл example строка 9: неизвестная команда: `f'
Мне надо обязательно через sed
Ella, так и говорите, мол "здрасте, мне по учебе надо, а не для своих нужд"
в скрипте Hvzh, нет неизвестных для линукса строк, проверьте драйвер мыши, он у вас плохо копирует.
[quote=Ella]Мне надо обязательно через sed
Ella, так и говорите, мол "здрасте, мне по учебе надо, а не для своих нужд"
в скрипте Hvzh, нет неизвестных для линукса строк, проверьте драйвер мыши, он у вас плохо копирует.[/quote]
В скрипте убрала звездочки, где путь прописывается, задала параметры- стало работать, правда выводит много ненужного мусора параллельно.
Ну так я писала, что через sed надо в самом начале, если бы было не принципиально, то не уточняла бы, дабы не загружать лишней информацией. Всем спасибо.