Автор Тема: Помощ за един лесничък скрипт  (Прочетена 1500 пъти)

Dark_Dreamer

  • Участници
  • ***
  • Публикации: 4
    • Профил
Здравейте нов съм в програмирането на скриптове  и имам нужда от вашата помощ за следния скрипт:

Substitution of text within a file: Now suppose you wanted to find and replace some words in a text file. You could do this manually using find and replace in a text editor. However, you could also write a script to automate the task. Here is an example which replaces 'plus' with '+':

echo "x is 5 plus 6" | sed 's/plus/+/g'
We now use sed instead of grep. In the expression s/plus/+/g, the 's' means substitute the second part (separated by '/') for the first and the 'g' means do this everywhere rather than just on the first occurrence. However it is possible to write this in one line (without error checking) using regular expressions. Below is a template, can you fill in the regular expression?

#!/bin/sh
expr `echo $* | sed ''`
exit 0

Въобще нямам представа как да го напиша този скрипт   :(
Активен

Dark_Dreamer

  • Участници
  • ***
  • Публикации: 4
    • Профил
Re: Помощ за един лесничък скрипт
« Отговор #1 -: Dec 27, 2008, 18:17 »
wow 100 vijdaniq na temata nikoi li ne moje da pomogne!?
Активен

radoulov

  • Напреднали
  • *****
  • Публикации: 116
    • Профил
Re: Помощ за един лесничък скрипт
« Отговор #2 -: Dec 27, 2008, 20:37 »
Аз лично, не мога да разбера въпроса ...

Цитат
However it is possible to write this in one line (without error checking) using regular expressions

?

Регулярните изрази извършват matching, не substitution.

Цитат
Below is a template, can you fill in the regular expression

Къде точно?

Код:
expr `echo $* | sed ''`
« Последна редакция: Dec 27, 2008, 21:30 от radoulov »
Активен

Dark_Dreamer

  • Участници
  • ***
  • Публикации: 4
    • Профил
Re: Помощ за един лесничък скрипт
« Отговор #3 -: Dec 27, 2008, 22:16 »
ами просто копи пастнах условието защото е от един енг саит, накратко какво трябва да прави скрипта е като го рънваш в терминала заедно с някакъв текст които съдържа думата plus да замени тази дума с знака +


Например да кажем че програмта се казва neshtosi

$ ./neshtosi x is 5 plus 6 plus 7 plus 8

да изведе на екрана

x is 5 + 6 + 7 + 8
Активен

cdiem

  • Напреднали
  • *****
  • Публикации: 21
    • Профил
Re: Помощ за един лесничък скрипт
« Отговор #4 -: Dec 28, 2008, 00:20 »
>Например да кажем че програмта се казва neshtosi
>
>$ ./neshtosi x is 5 plus 6 plus 7 plus 8
>
>да изведе на екрана
>
>x is 5 + 6 + 7 + 8

Не разбирам защо е сложено expr ``. Иначе програмата може да бъде например:
---------------------------------------
#!/bin/sh
echo $* | sed 's/plus/+/g'
exit 0
--------------------------------------
Може би има и вариант с expr; просто може би не съм достатъчно добър да мога да го напиша.
Ето и вариант на Perl (може да не е много елегантен, но работи):
--------------------------------------
#!/usr/bin/perl -w
map { $_ =~ s/plus/+/; print "$_ ";} @ARGV;
print "\n";
-------------------------------------


EDIT: видях защо е поставено expr `` - за да сметне израза след заместването на 'plus' с '+' ( http://en.wikibooks.org/wiki/Shell_Programming#expr_command ). Тогава shell-скриптът ще бъде нещо такова:
---------------------------------------
#!/bin/sh
expr `echo $* | sed 's/plus/+/g'`
exit 0
--------------------------------------
Но ще трябва да го извикваш с нещо такова (при мен скриптът се казва zz.sh):
cdiem@cdiemst:~$ ./zz.sh 5 plus 7 plus 6
18
cdiem@cdiemst:~$

В първия вариант по-горе (без expr):
cdiem@cdiemst:~$ ./zz.sh 5 plus 7 plus 6
5 + 7 + 6
cdiem@cdiemst:~$
« Последна редакция: Dec 28, 2008, 17:17 от cdiem »
Активен

radoulov

  • Напреднали
  • *****
  • Публикации: 116
    • Профил
Re: Помощ за един лесничък скрипт
« Отговор #5 -: Dec 28, 2008, 20:22 »
Или с GNU sed(заради -r) и bash:

Код:
$ ./s x is 5 plus 6 plus 7 plus 8
x is 26
$ cat s
#!/bin/bash

eval $(sed -r 's/plus/+/g;s/([^0-9]*)([0-9].*)/echo \1 $((\2))/'<<<$@)

С Perl:

Код:
$ perl -le'
 ($_ = shift) =~ s/plus/+/g;
 /(\D*)(.*)/ and print $1, eval $2
  ' 'x is 5 plus 6 plus 7 plus 8'
x is 26

Активен

Dark_Dreamer

  • Участници
  • ***
  • Публикации: 4
    • Профил
Re: Помощ за един лесничък скрипт
« Отговор #6 -: Dec 29, 2008, 20:31 »
blagodarq i na dvamata! nz za6to e dadeno s expr i az no 6te go mahna za6toto qvno sigurno ne6to ne e kakto trqbva.
Активен