bash - поиск текста в файле и сохранение его в переменной - PullRequest
1 голос
/ 02 января 2012

Я пытаюсь найти текст в файле и сохранить его в переменной.

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

Type: Furniture
Color: Blue
Version: 1

Я пытаюсь найти номер версии, сохранить его в переменной и увеличить его.Этот номер мне неизвестен, когда я ищу файл.Пока что у меня есть что-то подобное.

VERSIONNUMBER=//Somehow I want to get the version # from the file. 
VERSIONNUMBER=`expr $VERSIONNUMBER + 1'

sed -i "s/Version:.*/Version=$VERSIONNUMBER/" filename

Я пока на правильном пути или есть лучший способ сделать это?У меня проблемы с поиском номера версии.Я продолжаю получать синтаксические ошибки.Любая помощь очень ценится.

VERSIONNUMBER=`sed -i "s/Version:/*" filename`

Ответы [ 2 ]

6 голосов
/ 02 января 2012

Это работа для awk

 awk '/Version:/{$2++}1' ./infile > ./outfile

Пример

$ awk '/Version:/{$2++}1' ./infile
Type: Furniture
Color: Blue
Version: 2

Объяснение

/Version:/ Соответствует только строкам, содержащим текст 'Version:'

$2++: получить 2-е поле, из которого awk по умолчанию разделяет пробел, и увеличить его

{...}1: ярлык, чтобы сообщить awk print о строках после любых изменений

2 голосов
/ 02 января 2012

Если вы хотите перезаписать файл на месте, вы можете использовать Perl вместо Awk.

perl -i.bak -p -e 's/^(Version: )(\d+)/$x=$2+1,"$1$x"/e' "$@"

.bak сохраняет резервную копию filename в filename.bak; если вам не нужна резервная копия, удалите .bak из командной строки (но оставьте -i там). Модификатор e в регулярном выражении означает, что замена относится к выражению. Значения $2 и т. Д. Доступны только для чтения, поэтому сохраните увеличенное значение до $x, а затем используйте его как часть строки. Оператор запятой оценивает свою LHS, а затем свою RHS.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...