2015-11-12 5 views
-3

У меня есть текст с разделителями, в тексте есть строка, которая появляется несколько раз, и мне нужно удалить ее, когда она сопровождается другими строками.Удалить строку при выполнении условия

A  B  C  D E F G H I J 
string string string car29 "" "" "" "" "" string # We don't do anything 
string string string pool car29 "" "" "" "" string # Remove car29 
string string string fifo pool car29 "" "" "" string # Remove car29 
string string string car29 "" "" "" "" "" string # We don't do anything 

Ключевое слово car29 и мы просто действовать на строках, где это слово появляется

Ожидаемый выход

A  B  C  D E F G H I J 
string string string car29 "" "" "" "" "" string 
string string string pool "" "" "" "" "" string 
string string string fifo pool "" "" "" "" string 
string string string car29 "" "" "" "" "" string 
+0

Отредактируйте вопрос, чтобы показать, какой вывод вы хотите и почему. –

+0

http://unix.stackexchange.com/q/242504/13792 – choroba

+0

Непонятно, когда его удалить. Пожалуйста, добавьте еще немного логики к вопросу. – 123

ответ

0

С sed

sed '/\(.*"".*\)\{5\}/! s/car29/""/' <<\eof 
A  B  C  D E F G H I J 
string string string car29 "" "" "" "" "" string # We don't do anything 
string string string pool car29 "" "" "" "" string # Remove car29 
string string string fifo pool car29 "" "" "" string # Remove car29 
string string string car29 "" "" "" "" "" string # We don't do anything 
eof 

A  B  C  D E F G H I J 
string string string car29 "" "" "" "" "" string # We don't do anything 
string string string pool "" "" "" "" "" string # Remove car29 
string string string fifo pool "" "" "" "" string # Remove car29 
string string string car29 "" "" "" "" "" string # We don't do anything 
0

PERL на помощь!

perl -F'/\t/' -ape 's/(^|(?<=\t))car29($|(?=\t))/""/g if grep $_ ne "car29" && $_ ne q(""), @F[3..8]' 
  • -F задает столбец сепаратор
  • -a расколов в colunns (в ту @F массив)
  • -p процессы ввода строка за строкой, печать результатов
  • замещение происходит только, если столбец 3 .. 8 (просто гадание, ваша спецификация расплывчата) не пуста и отличается от car29
  • замещение заменяет car29 на "", когда ему предшествует начало строки или вкладка, а затем конец строки или вкладка. Осмотрите утверждения, которые используются для случаев, когда рядом с соседним расположено несколько car29. ^ и $, вероятно, не нужны, так как первые три столбца и последний в ваших примерах никогда не содержат car29 (неполная спецификация снова).
Смежные вопросы