Используя sed для нескольких соответствий, вместо этого соответствующих целому файлу

У меня есть файл как

0::question#1::
Love
giberrish fdfd

1::anything#2:
Is
repeat

22::anything#3::
Lie

Я хочу извлечь

Love
giberish
****
Is 
repeat
****
Lie

cat file.txt | sed 's/::\n([^\n]*)/\1/g'

Я получаю файл как

0::question#1::
Love

1::anything#2:
Is

22::anything#3::
Lie

При тестировании regex соответствует здесь https://regex101.com/

ОБНОВИТЕ я отсутствовал, чтобы сказать, что извлечение файла для для мультилинии не одна строка, и также я хочу deliminator также. Я приношу извинения за проблему

cat org_op.2019.04.06-09.43.59 | sed 's/^.*::.*//g;/^$/d'

Я произвожусь как

Love
giberrish fdfd
Is
repeat 2 4 4
Lie

Таким образом, я добавил некоторых deliminator для разделения одной записи от другого

cat org_op.2019.04.06-09.43.59 | sed 's/^.*::.*/***/g;/^$/d'

и добрался

 ***
Love
giberrish fdfd
 ***
Is
repeat 2 4 4
 ***
Lie

Для удаления известный, я использовал

cat org_op.2019.04.06-09.43.59 | sed 's/^.*::.*/ ***/g;/^$/d' | tail -n +2

новый вывод

  Love
  giberrish fdfd
  ***
  Is
  repeat 2 4 4
  ***
  Lie

Я хочу получить каждое рекордное использование awk я сделал

cat org_op.2019.04.06-09.43.59 | sed 's/^.*::.*/ ***/g;/^$/d' | tail -n +2 | awk 'BEGIN{ RS = "" ; FS = "***" }{print $1}'

Я произвожусь

Love
giberrish fdfd

Я не могу удалить последнюю пустую строку, которая является тем же через все поля, с которыми я пытался использовать канал для sed /^$/d не работал

ОБНОВИТЕ 2, получил его работающий

''sed 's/^.::.//g;/^ $/d' | хвост-n +2 | awk 'НАЧИНАЮТ {RS = ""; FS = ""} {печатает 1$}' | sed-e '/^ $/d''

0
задан 7 April 2019 в 01:39

2 ответа

Используйте метод согласующих отрезков длинной линии затем remnove те согласующие отрезки длинной линии и затем удалите пробелы...

sed -e '/^.*::.*/d' -e '/^$/d' data.txt

Результат:

Love
Is
Lie

Или более короткая версия:

sed -E '/^(.*::.*)?$/d'

Информация:

  • '/^.*::.*/d': Строки соответствия с :: и удалите их
  • '/^$/d': Удалите все пустые строки
1
ответ дан 25 October 2019 в 06:43
sed '/^[0-9]/d; /^$/d' file.txt
Love
Is
Lie
  • /^[0-9]/d: удалите строки, запускающиеся с числа
  • /^$/d: удалите пустые строки
2
ответ дан 25 October 2019 в 06:43

Другие вопросы по тегам:

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