Взрыв строки Bash

Мой файл выглядит так:

record=123
date=2012.01.20 10:22

В файле bash я использую cat myfile.ini, а затем мне нужно использовать что-то вроде explode, потому что мне нужно ТОЛЬКО grep 123 числовые данные записи и ничего больше.

Как это можно сделать в баше?


person Cyclone    schedule 20.01.2012    source источник


Ответы (4)


awk -F'=| ' '/record/ {print $2}'

Замените «дату» на «запись» в приведенной выше команде, чтобы получить дату (время будет в $3).

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

person Dennis Williamson    schedule 20.01.2012
comment
Хороший, но он не работает, если в записи (или дате) есть пробел. fe: record= 1 или date=2012-01-20 16:30. - person Cyclone; 20.01.2012
comment
@Cyclone: ​​я описываю случай, когда дата и время разделены пробелом (как показано в вопросе). Верно, что это не удастся, если входной файл не будет правильно сформирован. Если вы хотите, чтобы дата и время были вместе, вы можете использовать -F'='. - person Dennis Williamson; 20.01.2012

Если у вас есть контроль над ini-файлом, перепишите его как:

record=123
date="2012.01.20 10:22"

Затем в вашем "файле bash" вы делаете

. myfile.ini

echo $record

Это типичный подход. (если у вас есть контроль над ini-файлом)

person mvds    schedule 20.01.2012
comment
Пока у вас есть контроль над файлом. Потому что в некоторых случаях такой подход может быть угрозой безопасности (поскольку любые команды в файле будут выполнены). - person theglauber; 20.01.2012

Ты можешь использовать:

#!/bin/sh
VALUE="`grep '^record=' myfile.ini |sed 's/[^0-9]//g'`"
person xpapad    schedule 20.01.2012
comment
Если может быть более одной строки record = и вы хотите только первую, выполните VALUE = grep '^record=' myfile.ini | head -1 | sed 's/[^0-9]//g' - person theglauber; 20.01.2012
comment
Спасибо, отлично работает, не могли бы вы также сказать мне, как я могу указать дату после знака date=? - person Cyclone; 20.01.2012

Вы можете сделать что-то вроде этого:

awk '/=[0-9]+$/' file.txt

, чтобы выводить на стандартный вывод только строку с числовым содержимым после знака =.

Однако, если вы просто хотите записать 123 в переменную, вы можете использовать:

val=$(awk -F"=" '/=[0-9]+$/{print $2}' file.txt)
person anubhava    schedule 20.01.2012