Удалите строки, которые не запускаются с шаблона от данного набора шаблонов

yum install gcc gcc-c++ make 

Это работает эквивалентное из build-essential в CentOS.

9
07.11.2013, 00:38
6 ответов

Используя sed изменить файл на месте:

sed -i '/^\(report\|-t\(h\|o\)\)/!d' your_file

Это сообщает sed удалить все строки, не соответствующие шаблону. Сам шаблон ^ (запустите строки), сопровождаемый также report или -t сопровождаемый также h или o.

Необходимо отметить, что это не фактическая оперативная модификация: sed создает временную резервную копию и перезаписывает исходный файл с ним.

Если Вы хотите sed для хранения резервной копии исходного файла (который мог бы быть хорошей идеей, если файл содержит критические данные) дайте -i переключите расширение для создания файла резервной копии:

sed -i'.bak' -e '/^\(report\|-t\(h\|o\)\)/!d' your_file

изменит your_file и создайте резервное копирование названного оригинала your_file.bak.

Примечание стороны

Не неверно истолковывайте мои намерения или обижайтесь на это, но я заметил, что у Вас есть связанные вопросы многих подобных regex/text-processing. Я советую Вам начинать учиться sed, awk и grep самостоятельно помочь ускорить Вашу производительность. Снова, не понимайте меня превратно, я слишком рад помочь (как большинство людей здесь); это просто, что я думаю, что Вы выдерживаете извлечь выгоду чрезвычайно из взятия этих инструментов для Вашего ежедневного использования.

Только, чтобы доказать, как услужливые люди здесь, рассмотрите предложение @slm в комментариях ниже и не стесняйтесь отбрасывать этой чат-комнатой любое время для вопросов.

14
27.01.2020, 20:04
  • 1
    Ваше регулярное выражение кажется излишне загадочным. Я думаю, что Вы на самом деле используете больше символов, чем если бы Вы только что перечислили эти три опции явно. –  nispio 06.11.2013, 23:59
  • 2
    @nispio, который я знаю, но, вероятно, будет более эффективно, если рассматриваемый файл будет большим. –  Joseph R. 07.11.2013, 00:01
  • 3
    Интересный. Я всегда измерял regexps с точки зрения длины или удобочитаемости. Я никогда не много думал о скорости выполнения. Я не думаю, что знаю достаточно о том, как они оценены для оценки то, что быстро, но я предполагаю, что это - реализация, конкретная также, правильно? –  nispio 07.11.2013, 00:03
  • 4
    Повторение, что Joseph сказал о том, чтобы быть готовым помочь, если у Вас есть общие вопросы, которые не помещаются в стиль Вопросов и ответов, можно всегда пытаться болтать нас в чат-комнате для этого сайта. chat.stackexchange.com/rooms/26/unix-and-linux. Несколько из нас живут там 8-) –  slm♦ 07.11.2013, 00:03
  • 5
    @slm Спасибо за это. Я добавлю его к своему ответу. –  Joseph R. 07.11.2013, 00:08

Можно использовать простой grep для этого:

$ grep -e '^report\|^-th\|^-to' filename
10
27.01.2020, 20:04
  • 1
    Это не большая часть из сбережения, но Вы могли объединиться -th/-to в -t[ho]. –  Kevin 07.11.2013, 00:47
  • 2
    grep -e или egrep –  Olivier Dulac 07.11.2013, 10:26

Используя sed:

sed -n -e '/^report\|^-th\|^-to/p' filename
2
27.01.2020, 20:04
  • 1
    Это не большая часть из сбережения, но Вы могли объединиться -th/-to в -t[ho]. –  Kevin 07.11.2013, 00:47
  • 2
    @Kevin Это правда. Посмотрите мой разговор с Joseph R. в комментариях к его ответу. –  nispio 07.11.2013, 00:48

Используя awk:

awk '/^report|^-t[ho]/' file
2
27.01.2020, 20:04
  • 1
    SysV, Это не большая часть из сбережения, но Вы могли объединиться -th/-to в -t[ho]. –  Kevin 07.11.2013, 00:46

Корреспондент сделал две точки:

  • желание удалить любую строку, не запускающуюся с "отчета" или "-th" или "-к".
  • желаемый вывод должен удалить "все те средние нежелательные точки и хеши (так)"

Решения, в это время, обращаются к первой точке и таким образом также второму. Но предположите, файл больше и похож:

report aaaaaaaa  
-  ..  
-th bbbbbbbbb  
-to ccccccccc
anything else
.. --.
-tp ddd
-tq eee
     -  -----

Не был бы, обращаясь к второй точке OP сделать необходимое?

sed -r -i.bak '/^[ |.|-]*$/d' input-file 

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

1
27.01.2020, 20:04

Использование Perl:

perl -ne 'print if /^report|^-t[ho]/' filename > newfile

или, для редактирования на месте (как sed, perl также сделает временное резервное копирование, таким образом, это не верно на месте редактирование):

perl -i.bak -ne 'print if /^report|^-t[ho]/' filename

Это сделает копию исходного файла названной filename.bak и перезапишите свой исходный файл с отредактированной версией.

0
27.01.2020, 20:04

Теги

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