Как отделить числовые значения от идентификаторов

В настоящее время я пишу сценарий оболочки, который разделяет значения из их идентификаторов (извлекается из grep).

Например, если я grep для определенного файла, я получу следующую информацию:

value1 = 1 value2 = 74 value3 = 27 

Мне интересно, какую команду UNIX я могу использовать для ввода информации и преобразования ее в этот формат:

 1 74 27 

Цените любую помощь

Вы можете использовать awk следующим образом:

 grep "pattern" file.txt | awk '{printf "%s ", $3}' 

В зависимости от того, что вы делаете с grep , но вы должны использовать awk для самой greping :

 awk '/pattern/{printf "%s ", $3}' file.txt 

Другим способом, используя преимущество bash word-spliting :

 echo $(awk '/pattern/{print $3}' file.txt) 

Изменить : у меня есть более смешной способ присоединиться к значениям:

 awk '/pattern/{print $3}' file.txt | paste -sd " " - 

Разделите все до первого = и последующие пробелы, преобразуйте новые строки в пробелы и распечатайте окончательную новую строку:

 … | sed 's/^[^=]*= *//' | tr '\n' ' '; echo 

Как насчет просто

 cut -d= -f2 /tmp/file | xargs printf "%s " 

Это работает, потому что:

  1. Оболочка с надписью «printf» будет «повторяться», если она получает больше аргументов, чем параметры, указанные в выходной строке
  2. xargs превратит строки из ввода в слова в командной строке, переданной в printf
  3. cut будет использовать = в качестве разделителя и доставить только то, что следует за ним
  4. Конечно, строка printf будет отображать вывод, и поскольку явная новая строка не добавляется, добавьте ее в конец предыдущего.