Как удалить строки, которые содержат звездочку при помощи команды sed

У меня есть файл, которые содержат следующие строки.

**;**;**;
*(Eng_Sen:This is an apple)*;*(WordID:1 2 3 4)*;*(message:)*;
**;**;**

Я хочу удалить все строки, которые содержат следующие шаблоны с помощью команды Sed.

**;**;**;
**;**;**

Пожалуйста, помогите мне. Спасибо.

4
задан 20 February 2016 в 11:43

4 ответа

sed '/\*\*;\*\*;\*\*;\?/d' file
  • \*\*;\*\*;\*\*;\?: соответствует **;**;** строка, дополнительно сопровождаемая ; символ;
  • d: удаляет строку.

Для редактирования файла на месте:

sed -i '/\*\*;\*\*;\*\*;\?/d' file
% cat file                                          :(
**;**;**;
*(Eng_Sen:This is an apple)*;*(WordID:1 2 3 4)*;*(message:)*;
**;**;**
% sed '/\*\*;\*\*;\*\*;\?/d' file
*(Eng_Sen:This is an apple)*;*(WordID:1 2 3 4)*;*(message:)*;
% 
1
ответ дан 1 December 2019 в 10:17

ответ Коса уже делает задание. Мой ответ только улучшает regex несколько.

При помощи группирующегося шаблона \( \) и завершенное .\+ мы можем сказать этому соответствовать целой группе **; и независимо от того, что сопровождается. В этом примере я использую

$  sed -e "s|\(\*\*;\).\+|TEST|g"  stars.txt                            
TEST
*(Eng_Sen:This is an apple)TEST
TEST
TEST
*(Eng_Sen:This is an apple)TEST
TEST

Примечание, что версия GNU sed может взять любой символ в качестве разделителя в команде замены, не всего /. Здесь я использовал вертикальную панель.

В примере выше, я брал на себя смелость для увеличения примера OP с 3 до 6 строк.

$ cat stars.txt                                                
**;**;**;
*(Eng_Sen:This is an apple)*;*(WordID:1 2 3 4)*;*(message:)*;
**;**;**
**;**;**;
*(Eng_Sen:This is an apple)*;*(WordID:1 2 3 4)*;*(message:)*;
**;**;**
0
ответ дан 1 December 2019 в 10:17

Более в общем, для удаления любой строки, которая только содержит точки с запятой и звездочки:

sed '/^[*;]\+$/d'

, Хотя Вы не должны ограничивать себя sed:

grep -Ev '^[*;]+
1
ответ дан 1 December 2019 в 10:17

Можно использовать Vim в режиме Ex:

ex -sc 'g/\*\*/d' -cx file
  1. g глобальный поиск

  2. d удаляет

  3. x, сохраняют и закрываются

0
ответ дан 1 December 2019 в 10:17

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

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