Удаление всего текста между двумя наборами символов - PullRequest
1 голос
/ 04 июня 2019

У меня есть текстовый файл, который содержит сотни этих строк.Я хотел бы удалить каждую строку, заключенную в /* =.Вот пример:

/* Class = "UIButton"; normalTitle = "GET SUPPORT"; ObjectID = "2SP-lc-CRF"; */
"2SP-lc-CRF.normalTitle" = "GET SUPPORT";

/* Class = "UIButton"; normalTitle = "TAKE PHOTO"; ObjectID = "4Dp-dN-aZh"; */
"4Dp-dN-aZh.normalTitle" = "TAKE PHOTO";

/* Class = "UIButton"; normalTitle = "WHATSAPP"; ObjectID = "4J2-uX-p15"; */
"4J2-uX-p15.normalTitle" = "WHATSAPP";

, так что все, что у меня осталось, это:

"GET SUPPORT";
"TAKE PHOTO";
"WHATSAPP";

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

#!/bin/bash
sed 's//*.**/://' Test > RESULT.txt

Кажется, это не работает.Я заканчиваю с ошибкой:

 sed: 1: "s//*.**/://": bad flag in substitute command: ':'

есть идеи?

Ответы [ 2 ]

1 голос
/ 04 июня 2019

Вы можете использовать это sed, чтобы удалить все /* ... */ строки:

sed '/\/\*.*\*\//d; s/^.*= *//' Test > RESULT.txt
cat RESULT.txt

"GET SUPPORT";

"TAKE PHOTO";

"WHATSAPP"; 
  • Обратите внимание, что оба символа / и * являются специальными метасимволами регулярного выражения, которые необходимо экранировать.
  • /d удаляет строку для данного шаблона.
  • s/^.*= *// команда удаляет текст до =<space> при каждом удалении.
0 голосов
/ 04 июня 2019

В дополнение к sed вы также можете awk с тем же эффектом, например,

$ awk -F' = ' '/\/\*.*\*\/$/{next} /^$/{next} {print $2}' file
"GET SUPPORT";
"TAKE PHOTO";
"WHATSAPP";

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

...