Как разделить строку по шаблону в командной строке linux и вернуть последний экземпляр моего шаблона и все после - PullRequest
0 голосов
/ 04 июля 2018

Это мой первый вопрос о StackOverflow, надеюсь, он не слишком интересен для этого форума.
Заранее спасибо за помощь !!!

[ПРОБЛЕМА]
В моем скрипте bash есть переменная Linux bash со следующим содержимым:

[раскол]
это тест 1
[Раскол]
это тест 2
[Раскол]
это тест 3
это тест 4
это тест 5

Как я могу разбить этот файл на строку " [split] " и вернуть последний раздел после разбиения?

это тест 3
это тест 4
это тест 5

Последний раздел может отличаться по длине, но он всегда находится в конце "string" / "file"

Ответы [ 3 ]

0 голосов
/ 04 июля 2018

Используя awk, установите разделитель записей в регулярное выражение, представляющее разделенную строку, напечатайте последнюю запись в END.

gawk 'BEGIN{ RS="[[]split[]]" } END{ print $0 }' tmp/test.txt

Результат при условии ввода данных из файла:

this is a test 3
this is a test 4
this is a test 5
0 голосов
/ 04 июля 2018

Как насчет этого? :)

FILE="test.txt"
NEW_FILE="test_result.txt"
SPLIT="split"

while read line
do
if [[ $line == $SPLIT ]]
then
    $(rm ${NEW_FILE})
else
    $(echo -e "${line}" >> ${NEW_FILE})
fi

done < $FILE
0 голосов
/ 04 июля 2018
#!/bin/bash

s="[split]
this is a test 1
[split]
this is a test 2
[split]
this is a test 3
this is a test 4
this is a test 5"

a=()
i=0
while read -r line
do
  a[i]="${a[i]}${line}"$'\n'
  if [ "$line" == "[split]" ]
  then
     let ++i
  fi
done <<< "$s"

echo ${a[-1]}

Я просто читаю каждую строку из строки в массив, и когда я сталкиваюсь с [split] , я увеличиваю индекс массива. Наконец, я повторяю последний элемент.

EDIT : если вы просто хотите, чтобы последняя часть тоже не нуждалась в массиве. Вы можете сделать что-то вроде

while read -r line
do
  a+="${line}"$'\n'
  if [ "$line" == "[split]" ]
  then
     a=""
  fi
done <<< "$s"

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