Как получить имя из другого файла с помощью скрипта Bash?

260
Madeleine P. Vincent

Я хотел бы извлечь имя из другого предопределенного файла и использовать его в моем сценарии оболочки.

Файл для чтения будет в ./docs/description.org и формат (таблица в .orgформате):

...some text | Time | 12.00 | | Name | D0_50_H04 | | blah | blah | ... more text 

В названии гарантированно не должно быть пробелов (оно будет буквенно-цифровым + подчеркивание), и оно будет заключено в |символ пробела в столбце, который следует сразу за единственной строкой, содержащей слово «Имя».

Я хотел бы прочитать значение имени (в данном случае «D0_50_H04») и использовать его в сценарии оболочки.

Мой скрипт Bash выглядит примерно так:

#!/bin/bash  ...some stuff  #Read in the model name ModelName = #how do I do this??  #Create that directory mkdir $SCRATCHDIR/$ModelName cd $SCRATCHDIR/$ModelName  ..continue working in that new dir 

Я думал об использовании grep, но я не мог заставить его работать правильно.
Кто-нибудь сможет помочь?

1

2 ответа на вопрос

2
Art Gertner

Что именно у вас не работает с grep ? Попробуйте посмотреть на команду вырезать . Вы смотрите на что-то вроде:

grep YourFileNameHere -e "| Name |" | cut -d " " -f 4

это должно проанализировать YourFileNameHereи найти строку, содержащую | Name |затем эту строку, к cutкоманде, которая выберет 4-й токен между (пробелами) разделителями, которые согласно вашему описанию должны бытьD0_50_H04

Ах, это была команда сокращения, которую я не знал об этом. Спасибо за чаевые. Madeleine P. Vincent 9 лет назад 0
1
ryekayo

попробуйте это: awk '\Modelname\ ' directory/of/the/file

awk был тем, что я искал, действительно. Вот строка в моем скрипте Bash, которая работает для приведенного выше примера: `modelName = \` awk '/ Name / ' ./docs/description.org \ `` Madeleine P. Vincent 9 лет назад 0
Итак, вы гарантируете, что имя будет окружено *** пробелами ***, отделяющими имя от вертикальных полос? Если нет, это не будет работать правильно; в результате он будет включать одну или обе вертикальные полосы. Попробуйте `ModelName = $ (awk –F '|' '/ Name / ' docs / description.org)`. Scott 9 лет назад 0
На самом деле, @Scott, формат .org гарантирует наличие пробела, окружающего имя из вертикальных черт. Madeleine P. Vincent 9 лет назад 0
@Madleine: это приятно знать. Моя точка зрения (которую, я полагаю, я на самом деле не упомянул) заключается в том, что такая уточняющая информация относится к вопросу. Вы знаете, что можете [отредактировать] свой вопрос после публикации, верно? (И, кстати, это не один из тех редких случаев, когда вам нужно использовать `. /`.) Scott 9 лет назад 0

Похожие вопросы