Как из строки к,примеру "имяфайла.txt" ,выделить подстроку "имяфайла"(без ".txt")и поместить ее в переменную?
>Как из строки к,примеру "имяфайла.txt" ,выделить подстроку "имяфайла"(без ".txt")и поместить ее в
>переменную?cut, sed, awk
а нельзя ли где-нибудь пример посмотреть?
>а нельзя ли где-нибудь пример посмотреть?var=`echo filename.txt | sed -e 's|\.txt$||'`
echo $varНо правильней в данном случае (отрезать расширение) - как сказали с basename.
>Как из строки к,примеру "имяфайла.txt" ,выделить подстроку
>"имяфайла"(без ".txt")и поместить ее в переменную?man basename
$F=`basename имяфайла.txt .txt`
WARNING! HATRED AND man sh AHEAD! PROCEED AT UR 0WN RISC!!!Я _точно_ уверен, что с BSD -- ВЕСЕЛО! Это из вас так позикссовместимость "прёт"?... Увидел вопрос - думаю, чего с крестьянами связываться, ответят же через 10 минут. Ан нет.
Люди, ау! Ни один из вас не читал man sh своего FreeBSD?? Ссылочку дам, мне не сложно: http:/man.shtml?topic=sh&category=1&russian=1 Да, сложно, "нипарусски" и диплом о высшем ну никак не гарантирует умения учиться и читать... Но чтоб куча ответов и все не совсем... эээ... оптимальные?!
Я был понсостью уверен, что искорчен bash-ем и _авнгарда_ вроде
${ parameter % word }
в теме про саму! FreeBSD мне не простят, увидев два "необычных" ответа, проверил и увидел
${ parameter % word }
в своиз man ash и man dash. Тут-то у меня и возник вопрос, а как с
${ parameter % word }
в man sh от FreeBSD.... google... site:opennet.ru (Да! отдельное спасибо за размещение на сайте "миноритарных" man-систем - FreeBSD, Solaris... забавнейшее чтиво, местами.) Ба! так вот оно ж, туточки!!
${ parameter % word }
А вы basename, sed... Perl с питоном и жаввой разве ещё не приплели.var="text.txt"
var2="${var%.txt}"
echo "$var2.html"
Народ, это я так,примерчик бросила.Мне вообще нужно от строчной переменной "7898798qweer" отрезать несколько символов,начиная с какой нибудь позиции.У bash посмотрела $(myvar:4:3),но у нас не стоит bash,есть токо sh .Как такое же сделать под sh?Помогите,пж,ничего не получается.
К примеру, ff="123.001dsa" , мне нужно как то получить из этой переменной первые 6 символов.Как это сделаь?
>К примеру, ff="123.001dsa" , мне нужно как то получить из этой переменной
>первые 6 символов.Как это сделаь?Например http://snap.nlc.dcccd.edu/reference/shellguide/shells.html
Спасибо,конечно,но я там ничего не нашла.А помочь ,значит, слабо начинающей?Все когда-то первый раз начинали и уйму времени на все это тратили.Жалко знаниями делится?или просто сами не знаете?
>К примеру, ff="123.001dsa" , мне нужно как то получить из этой переменной
>первые 6 символов.Как это сделаь?coder@ubuntu ~ $ expr substr '123.001dsa' 1 6
123.00Вот только зуб не дам, что это сработает во FreeBSD В таком случае, можно использовать awk:
coder@ubuntu ~ $ echo '123.001dsa' | awk '{print substr($0, 1, 6)}'
123.00или sed:
coder@ubuntu ~ $ echo '123.001dsa' | sed 's|^\(.\{6\}\).*|\1|'
123.00или perl/python/etc
>так вот оно ж, туточки!!
> ${ parameter % word }
>А вы basename, sed...Вариант с basename более читаем IMHO, чем эти шельные ${} инструкции.
написала
echo '123.001dsa'|awk'{print substr($0, 1, 6)}'
Ругается,по сле awk... пишет not found
>написала
>echo '123.001dsa'|awk'{print substr($0, 1, 6)}'
>Ругается,по сле awk... пишет not foundА в выполненной вами команде после "awk" тоже нет пробела?
Если его нет, то должно получиться что-то вроде этого:$ echo '123.001dsa'|awk'{print substr($0, 1, 6)}'Что, в общем-то, вполне понятно: команда awk{print substr($0, 1, 6)} вряд ли существует. ;-)
bash: awk{print substr($0, 1, 6)}: команда не найдена
bash: echo: ошибка записи: Обрыв каналаЕсли же пробел поставить, то конструкция отрабатывает нормально:
$ echo '123.001dsa' | awk '{print substr($0, 1, 6)}'
123.00
>WARNING! HATRED AND man sh AHEAD! PROCEED AT UR 0WN RISC!!!
> ${ parameter % word }Андрюша ты чего так возбудился то? Вопрошающей в первые пять секунд рассказали о basename.
Ну а потом пошли бантики что я мол имела в виду совсем другое ...
"Или давайте лучше я перефразирую вопрос! Где в Москве можно купить приличную бижутерию?"(С)Большая разница.
А вообще рекомендую впялить http://www.freebsd.org/cgi/man.cgi в закладки. Для такого рода исследований - самое оно :)Как то так.
>Андрюша ты чего так возбудился то? Вопрошающей в первые пять секунд рассказали
>о basename.Про этот basename раз в неделю рассказывают - несколько раздражает. В частности и использование двух процессов и пайпов для того, что "шифруется" одним ин-лайн выражением шелл. ... Ну, не сдержал "порыв", да.
А давайте напишем ---
"Advanced FreeBSD sh scritping guide" (краткое издание):
1. Ответ на любой вопрос "как мне во FreeBSD шелл ..." -- есть в man sh[ссылка-^выше].
1.1. Просмотреть, запомнить, отработать навыки использования встроенных -- типов данных, объектов (окружение, переменные, процессы, массивы, "фоновые" задания, определение функций, и т.п.), функций для работы с ними (=разнообразие и систематизация встроенных команд и конструкций).
1.99. Ответ на любой вопрос есть в п.1, ответы на другие _есть_ в следующих.
2. Для [не описанной п.1] обработки данных на шеле _надо_ использовать програмы-фильтры. См. gnu coreutils, awk (gawk,nawk,mawk...), sed (+?gsed), и т.д. вплоть до однострочников или около того на perl.(Да, man sh не достаточно для многих задач.)
2.0.1. sh как среда объединения задач в большей степени, чем [?замкнутый] язык программирования. (TAOUP)
2.1. Регулярные регулярные регулярные регулярные выражения выражения выражения выражения.[ссылки-^выше]
3. Для использования (интеграции/управления потоком данных) програм-фильтров _надо_ [пере]осмыслить конструкции из п.1 - конвейеры, перенаправления, субшелы и пр.
3.1. Да, просенькие фильтры можно писать на самом шеле. (|while read var; do ...)
4. Всё укра^Wпридумано до нас - не надо самому ничего "придумывать", главное найти, где почитать и уты^Wнаучиться. (Чужие скрипты, "Adv.BASH scripting guide", ещё чужие скрипты, _читать_ архивы форумов/рассылок.)
4.0.1. То, что не придумано до - придумать во время. Осторожно!
4.1. Осмыслить преобретённый опыт работы с и использования -- определить, какие задачи боьше походят для, какие задачи - меньше. (hint: TAOUP)
4.99. Повторять в процессе _всё_, начиная с п.1 !
5. Над шелом, горизонты шире: какие полезные прогрмы м.б.использованы в, расширяя его ещё более другими функциями. (gnu screen, ещё раз - coreutils (каждый раз что-то новое!), psmisc?работа с процессам)
6. Позикс шел, фри-бсд-шелизмы, обязательный курс молодого борца с башшизмами и линукс-кернелизмами, стрельба из базуки и метание грязных гранат.
6.1. Краткий курс пар^Wистории: позикс, юникс(тм). AT&T против USC Berkeley - Unix против BSD?
6.2. Свобода религии: GNU и GPL -- любовь или ненависть?"Я это сделал!"(тм) -- Митрофанов А.Б., сим передаю текст выше в общественное достояние (=public domain)
Аlles, БОЛЬШОЕ СПАСИБО.Все получилось.Сисадмин уехал в отпуск..срочно нужно было скрипт написать,вот и приходится самой разбираться.Видно не все линуксоиды злые...трудно им наверное,вот и злые...::-))
>Аlles, БОЛЬШОЕ СПАСИБО.Все получилось.Сисадмин уехал в отпуск..срочно нужно было скрипт написать,вот и
>приходится самой разбираться.Видно не все линуксоиды злые...трудно им наверное,вот и злые...::-))Да завсегда пожалуйста. :-)
Уважаемая fly, Андрей Митрофанов и Warhead Wardick "ополчились" вовсе не на Вас.
По крайней мере, у меня сложилось именно такое впечатление.
Написать такой труд было бы здорово, но! Левой задней ногой делать не хотелось бы, а качественное изложение - есть большой труд.Ну и в общем - ты их хочешь _научить_! Не quick'n'dirty а системно и последовательно ...
Научить тех кого не смогли\не захотели научить в школе \ институте \ универе \ на работе ...
Возникают ведь вопросы:
- а хотят ли они сами учиться? (в свете вышеизложенного - хрена с два!)
- а оно мне надо? СССР кончился - теперь каждый сам за себя :(
...
- будешь в канадии - дай знать, возьму хорошего вискаря и пожарю шашлыков. Ну должна же быть хоть какая то награда тянущим лямку без единого шанса :)
взято с http://lib.ru/unixhelp/unixshell.txt5_3. Команда ena
Команда ena позволяет получить части полного имени файла.
Первый аргумент - флаг, второй - имя файла. Команда различает
следующие флаги:
-n - имя файла без расширения
-f - имя файла с расширением
-e - расширение
-d - имя директории
-p - если имя файла начинается с . или .. , то эти
символы выделяются из имениНиже приводится текст программы ena, хранящийся в /util/ena.
# Get part of pathname
case $1 in
-n )
expr $2 : '.*/\(.*\)[.].*' \| $2 : '\(.*\)[.].*' \| $2
;;
-f )
expr $2 : '.*/\(.*\)' \| $2
;;
-e )
expr $2 : '.*\([.][^./]*\)' \| ' '
;;
-d )
expr $2 : '\(.*\)/.*' \| $2
;;
-p )
expr $2 : '\([.]\)/.*' \| $2 : '\([.][.]\)/.*' \| ' '
;;
* )
echo "error: unknown part of pathname $1"
exit 2
;;
esacPS. Учите матчасть