Вы можете использовать команду ниже:
grep -E "name|age" filename | sed 'N;s/\n/ /' | sed 's/[=,]/ /g'| awk '{ print $2, $4}'
он выдаст такой результат:
ABC 7
XYZ 9
РЕДАКТИРОВАТЬ:
Команда ниже выдаст строку со строкой name
или age
grep -E "name|age" filename
name=ABC
age=7
name=XYZ
age=9
Эта команда сделает одну строку из двух строк
grep -E "name|age" filename | sed 'N;s/\n/ /'
name=ABC age=7
name=XYZ age=9
Команда ниже удалит знак равенства = from output
grep -E "name|age" filename | sed 'N;s/\n/ /' | sed 's/[=,]/ /g'
name ABC age 7
name XYZ age 9
Команда ниже выводит ваш requiremnt
grep -E "name|age" filename | sed 'N;s/\n/ /' | sed 's/[=,]/ /g'| awk '{ print $2, $4}'
ABC 7
XYZ 9
awk
, выводит 2-й и 4-й аргумент предыдущего вывода команды
, тем не менее, вы сталкиваетесь с любой проблемой, чтобы понять любой синтаксис, который Google может подробно объяснить :).
Как вы уже догадались, $ {var /% flac / mp3}
заменяет окончание «flac»
(если есть) в значении $ var
с «mp3»
. "$ {var [@] /% flac / mp3}"
будет делать то же самое для каждого элемента, выводимого $ {var [@]}
if var
был массивом.
Здесь, поскольку a
не является массивом, вы можете удалить [@]
(я предполагаю, что это наследие предыдущих попыток программиста).
Здесь выполняется простое расширение оболочки. Переменная a
будет перебирать все файлы, соответствующие глобусу *.flac
.
Поскольку каждая запись будет файлом (и я предполагаю отсутствие пробелов в именах файлов), foo.flac
будет расширением $a
и ${a[@]}
.
Конструкция ${var/%foo/bar}
заменит foo
на bar
в конце переменной var
. Таким образом, она заменяет расширение flac
на расширение mp3
в вашем примере, чтобы обеспечить ffmpeg
выходное имя файла.