2016-08-17 3 views
0

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

Вход:

['0x66'] 
['0x66', '0x137', '0xa9'] 
[] 
['0x148', '0x11a', '0x167', '0x151', '0xe6'] 
[] 
['0x171', '0xe2', '0x174'] 

Выход:

0x66 
0x66 
0x137 
0xa9 
0x148 
0x11a 
0x151 
0xe6 

Я использовал: tr -d "[] ',", но после удаления из них linux имеет любую команду, например .split() в python.

[EDIT] После того, как смотреть на человеке страницах тра, я вижу, есть вариант перевода, поэтому я конвейер всего ouptut к:

output | tr -d "[]' | tr " " "\n" 
+1

Похоже, это JSON (или чего-л. как это), и его следует анализировать вместо того, чтобы манипулировать строкой. – Roman

+0

@ Roman, ... если бы это был JSON, это были бы двойные, а не одинарные кавычки. –

+0

... если это * были * JSON, то 'jq -r '. []'' Сделал бы трюк. –

ответ

0

Как насчет трубопровода к этому:

| tr -d "[]' " | tr ',' '\n' | sed -n '/^.\+$/p' 

Сначала он удаляет бесполезные символы, затем «разбивает» поля на свои строки и затем удаляет все пустые.

0

С tr и небольшая помощь от sed:

tr -d "[]' " <file.txt | sed -n '/./ p' | tr ',' '\n'  
  • tr -d "[]' " removes all [,] `, пространство и одинарные кавычки из данных

  • sed часть соответствует линии, по крайней мере один символ Оставить пустые строки

  • п tr ',' '\n' преобразует все запятые переводы строк


% cat file.txt 
['0x66'] 
['0x66', '0x137', '0xa9'] 
[] 
['0x148', '0x11a', '0x167', '0x151', '0xe6'] 
[] 
['0x171', '0xe2', '0x174'] 

% tr -d "[]' " <file.txt | sed -n '/./ p' | tr ',' '\n'  
0x66 
0x66 
0x137 
0xa9 
0x148 
0x11a 
0x167 
0x151 
0xe6 
0x171 
0xe2 
0x174 
4

Я предлагаю использовать простой grep -o (показать только соответствующий текст):

grep -o "0x[^']*" file 

0x66 
0x66 
0x137 
0xa9 
0x148 
0x11a 
0x167 
0x151 
0xe6 
0x171 
0xe2 
0x174 
+0

@ Snort5121: Если вывод показан в выводе 'grep', вы можете перейти на' | grep -o "0x [^ '] *" ' – anubhava

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