LINUX.ORG.RU

Bash

 


0

1

Приветствую! Интересует вопрос, как сделать следующе: есть 100 файлов с названиями типа file[1-100], как мне в каждый из этих файлов добавить строку с цифрами из его имени? Например в файл «file1» добавить строку «1», а в файл file20 добавить строку «20». Спасибо



Последнее исправление: Sherman (всего исправлений: 1)

Открыть любую статью про bash, почитать про циклы.

Kroz ★★★★★
()

не забудь пометить тему как решенную.

удачи, друх.

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

с названиями типа

cut -c5-15

представляется более адекватным:

grep -o '[[:digit:]]*$'

anonymous
()
Ответ на: комментарий от mystery

for file in `ls`; do num=$(echo $file | sed 's/file//g')

Вот с одной стороны смотришь на товарищей, что посылают ОПа с его домашними заданиями, и думаешь что они правы, а с другой стороны видишь, какой кошмар генерируют другие, — и понимаешь, что посылы не работают.

Zmicier ★★★★★
()
Последнее исправление: Zmicier (всего исправлений: 1)
Ответ на: комментарий от Zmicier

Не говори.

for i in {1..100}; do echo $i >> file$i; done
anonymous
()
Ответ на: комментарий от anonymous

`ls`

А что не так? Ну можно $(ls)
Не все sh на * выдают список верно

echo $file

ну можно echo «$file»; но тут смысла экранирования нету, все файлы заведомо известно как называются

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

названиями типа

известно как называются

задача неявно переформулируется в строгую форму (чем стрoже формулировка, тем более плавающим может быть решение; как на более узкому классе функций можно ввести больше функционалов). но даже если сработает в частном случае - прививается вредный подход

А что не так?

этот выхлоп очень не рекомендуется для парсинга, либо «find -exec» либо «globbing», неплохо написано здесь: http://mywiki.wooledge.org/BashPitfalls#for_i_in_.24.28ls_.2A.mp3.29

anonymous
()

Нехорошо называть темы, не поясняя суть. Да еще дублируя тэг. Обычно такое нарушает правила...

I-Love-Microsoft ★★★★★
()
Ответ на: комментарий от u0atgKIRznY5

Пи..., тебе и товарищу выше, аноним написал что так делать нежелательно.
Если очень хочется ls, можно сделать так:

ls | while read filename ; do something "${filename}" ; done

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

Дошло! Товарищи Ъ или не умеют в английский.
Тогда коротко о чём там:

cd /tmp
mkdir test
touch "file one" "file two"
for fname in $(ls) ; do echo "${fname}" ; done
ls | while read fname ; do echo "${fname}" ; done
И сравнить результаты.

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

Забыл после mkdir cd в test сделать.

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