Проверьте, если текущий филиал находится в списке Newline Delimited

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

#!/bin/sh

sed '
    s/^[-0-9]*  */date=/
    s/,.*thisOne={/ /
    s/}.*//
    s/,/ /g
' "$@" |
while read line
do
    eval $line
    echo date=$date
    echo id=$id
    echo name=$name
    echo ip=$ip
    echo port=$port
done

Команда sed преобразует строку ввода в следующую:

date=00:12:10 id=1001 name=TestGw ip=192.168.0.1 port=88

Цикл while читает по одной такой строке за раз, а eval $ line ] вызывает выполнение строки в оболочке, в результате чего переменные устанавливаются на заданные значения.

Сценарий будет обрабатывать имена файлов из командной строки ИЛИ стандартного ввода (обратите внимание на «$ @» в конце команды sed ).

Команда sed преобразует строку в операторы присваивания оболочки с помощью серии команд s (заменить):

  1. Заменить, только в начале строки ( ^ ), любая последовательность тире и цифр ( [- 0-9] * ), за которой следует один или несколько пробелов ( * ) с date = :

     s / ^ [- 0-9] * * / date = / 
     
  2. Замените запятую, за которой следует любые символы (. * ), за которыми следует thisOne = с пробелом:

     s /,.* thisOne = {/ / 
     
  3. Удалить закрывающую скобку (} ), за которой следует любые другие символы. (. * ) до (подразумеваемого) конца строки:

     s /}. * // 
     
  4. Заменить все запятые (, ) с пробелами:

     s /, / / ​​g 
     

В примере сценария я рекомендую временно удалить канал | до конца файла и запустить только sed командная часть скрипта, чтобы вы могли поэкспериментировать и увидеть, как w это работает.

0
11.09.2018, 13:36
1 ответ
  1. trзаменяет отдельные символы, а не строки. Как вы предполагаете, вы можете использовать sedдля удаления строки в конце строки:

    git branch --merged dev | sed 's/@squashed$//'
    
  2. Вместо зацикливания используйте grep, чтобы определить, содержит ли список строк, по одной на строку, строку, начинающуюся со ссылочной строки:

    git branch --merged dev | sed 's/@squashed$//' | grep -q "^..$current_branch"
    

А еще лучше, поскольку вы используете git, попросите его отфильтровать для вас:

git branch --list "${current_branch}*" --merged dev

перечислит любую ветку, объединенную с dev, имя которой начинается с текущей ветки. (Поскольку вы выполняете фильтрацию по началу имен веток, вам не нужно удалять часть «@squashed», если только я что-то не упустил.)

2
28.01.2020, 02:31

Теги

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