2014-10-17 2 views
-4

Что такое «лучший» способ очистки этой команды unix? (Например, один чистый СЕПГ команда)преобразование сложной команды tr в команду sed

cat file.txt | tr '\t' '|' | tr '|\n' '|' | tr -s '|' | tr '"' '\n' | sed "/^|/d" 

Мой рабочий был что-то вроде следующего:

  1. заменить вкладки с трубами
  2. заменить трубу + новую линию только с трубой
  3. выжимать из дублированного трубы
  4. заменить «отметки новой строкой
  5. удалить дополнительные | на каждую строку

(У меня были проблемы с использованием СЭД, чтобы заменить вкладки, новые линии и т.д., так вот почему я использовал Tr)

+4

пример будет лучше. –

+0

Было бы гораздо полезнее показать ваш вход и желаемый выход. Есть способы убрать то, что вы сделали, но, учитывая знание того, что вы пытаетесь сделать, может быть совершенно другой способ обойти это. Пожалуйста, обновите свой вопрос. –

+0

Каковы спецификации этого фильтра, т. Е. Что нужно преобразовать или удалить? Без этого нам нужно было бы перепроектировать это из вашей (неэлегантной) реализации! –

ответ

0
sed -n 'H;${s/\t/|/g;s/\|\n/|/g;s/\|{2,\}/|/;s/"/\ 
/g;s/\(\n\)\|\{1,\}/\1/g;s/.//p;}' file.txt 

Ваш заказ и последовательность вряд ли может быть изменен из-за возможности для создания нового Интеллектуальный шаблон после каждой модификации.

0

Это может работать для вас (GNU СЭД):

sed 's/\t/|/g;:a;$!N;s/|\n/|/;ta;s/|\+/|/g;s/"/\n/g;s/^|//Mg;P;D' file 

Последняя операция немного неоднозначным - удалить | или удалить строку?

Я решил удалить |.

Чтобы удалить линию, используйте s/^|.*$//Mg.

0

Без ввода пробы и ожидаемого результата это только догадки, но это может сделать то, что вы хотите:

awk -v RS='^$' -v ORS= '{ gsub(/\t/,"|"); gsub(/\|\n/,"|"); gsub(/\|+/,"|"); gsub(/"/,"\n"); gsub(/(^|\n)\|/,""); print }' file 

выше использует GNU AWK для мульти-гольцов RS.

Вероятно, есть более простое решение awk после того, как вы покажете нам ожидаемый ввод/вывод, приведенное выше просто переводит ваши команды tr и sed в синтаксис awk, который не может быть идиоматически лучшим подходом.

Смежные вопросы