nixp.ru v3.0

20 января 2017,
пятница,
19:10:39 MSK

DevOps с компанией «Флант»
anonymous написал 1 марта 2006 года в 22:44 (363 просмотра) Ведет себя неопределенно; открыл 1814 темы в форуме, оставил 5575 комментариев на сайте.

Друзья, кто-нибудь занимается написанием скриптов? нужна помощь…

Feuerbach

А сразу к делу нельзя?

Или ты ждешь пока появится это?

anonymous

была вероятность что никто не отзовется…

Нужен скрипт чтобы после прочтения файла, найти в нем » \ » и поменять на » / »… можешь помочь?

Genie

чё?!

а при чём тут shell?!!

man sed

заменить в файле все вхождения:

$ sed -i 'a~\\~/~g' file.txt

ps: даже не знаю.. плакать, смеяться или материться?…

anonymous

еслиб все было так просто…

надо именно на shell!!!

рекурсивнуй обход каталога и замена всех разделителей пути \ на / в файлах…

и только на shell… если есть какие-нить варианты, буду очень благодарен!

Feuerbach

Кхм.. в никсах пути разделяются именно /. И никаких вариантов :)

Чего ты хочешь добиться?

myst

Во всех файлах?

find /path/to/where/you/need/ | xargs sed -i 'a~\\~/~g'

Genie
надо именно на shell!!!

ну что за упёртость…?

на шелле это сделать можно, но — не на всяком *sh. на bash — можно. извратно только будет.

вообще же, шелл — это «клей», который связывает между собой выполнение других консольных утилит.

man tr

man sed

man perl

- все эти программы могут запросто сделать нужное тебе.

средствами самого *sh — слишком зависимо от версии.

Uncle Theodore

Ходить по дереву файловой системы в шелле так:

#!/bin/sh
recursion(){
    for file in `ls .`; do  
      if [[ -d $file ]]; then
          cd $file; recursion
      else echo $file <-- сюда ставим, что делать с файлом (sed ...)
      fi
    done;  
}
recursion;

Good Luck,

UT

PS А упертость, похоже, из-за того, что ето его домашнее задание… :-)

myst

Д/з стало быть. Тогда man sh.

anonymous
Uncle Theodore
Ходить по дереву файловой системы в шелле так:

#!/bin/sh
recursion(){
    for file in `ls .`; do
      if [[ -d $file ]]; then
          cd $file; recursion
      else echo $file <-- сюда ставим, что делать с файлом (sed ...)
      fi
    done;
}
recursion;

Good Luck,

UT

PS А упертость, похоже, из-за того, что ето его домашнее задание… :-)

да в инсте задали вот я и сел….

Так значит то что ты дал, это и есть поск и замена …

Uncle Theodore
Григорий
да в инсте задали вот я и сел….

Так значит то что ты дал, это и есть поск и замена …

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

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

Good Luck,

UT

rgo
Григорий
да в инсте задали вот я и сел….

Так значит то что ты дал, это и есть поск и замена …

нее, то что написал UT, как ты можешь проверить простым запуском — просто обход дерева и печать имён файлов.

А садиться не надо, надо просто запустить sh, и перемежать чтение манов, игрой с ним. Вплоть до просветления ;)

Genie

насчёт извращённости — эт не сильно извращённее sed’а ;)

cat $file | read -r -d "" var IFS="";
echo ${var//\//\\} IFS=""
rgo

хотя если совсем отказаться от внешних программ, придётся поразвлекаться с open… да и read уже из bash дополнений, а не из sh. А на sh, в том виде как он описан в info bash, по-моему, нельзя обойтись без внешних программ.

myst

Скорее всего тов. Григорий просто недопонял задание. «Нписать на shell» — не значит «сделать только средствами shell». Это значит — «Написать скрипт на shell, который используя подручные средства (sed, awk, find, xargs), делает <то и то>».

ecobeingecobeing.ru
Экология и вегетарианство на благо всем живым существам Планеты.