Сценарии оболочки, удаляющие текст до и после строк - PullRequest
1 голос
/ 01 марта 2011

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

--Begin file


random unknown junk text

----Begin Piece one ---- 
random important text
----End Piece one ----

random unknown junk text

----Begin Piece two ---- 
random important text
----End Piece two ----

random unknown junk text

----Begin Piece two ---- 
random important text
----End Piece two ----

random unknown junk text


end of file

Ответы [ 2 ]

2 голосов
/ 01 марта 2011
sed -n '/^\(--Begin file\|end of file\)/{p;b}; /^----Begin Piece/{p;:a;n;/^----End Piece/{p;b};p;ba}' inputfile

Объяснение:

  • /^\(--Begin file\|end of file\)/{p;b} - Печать начала / конца файла (соответствует буквальному тексту)
  • /^----Begin Piece/{ - Если строка соответствует началу блокамаркер
    • p - распечатать
    • :a - подпись a
    • n - прочитать следующую строку
    • /^----End Piece/{ - еслиэто маркер конца блока
      • p - распечатать его
      • b - перейти к концу, чтобы прочитать следующую строку ввода
    • } - конец, если
    • p - печать строки, которая находится внутри блока
    • ba - ветвь для пометки a, чтобы увидеть, есть ли еще строки в блоке
  • } - конец, если
0 голосов
/ 01 марта 2011
#!/bin/bash
exec 3< file.txt
fl=0
regex='----Begin Piece.+'
regexe='----End Piece.+'
while read <&3
do
    if [ $fl -eq 1 ] && [[ ! "$REPLY" =~ $regexe ]]; then
        echo "$REPLY"
    fi
    if [[ "$REPLY" =~ $regex ]]; then fl=1; fi
    if [[ "$REPLY" =~ $regexe ]]; then fl=0; fi
done
exec 3>&-
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...