Если у вас есть perl переименовать
(иногда его называют prename
), вы можете сделать это:
( cd Project && rename 's!(.+)/(.+)(\.mp3)!$1.$3!' */audio.mp3 )
Это берет каждое имя файла, соответствующее оболочке glob * / audio.mp3
, и разбивает его на каталог, имя файла и компоненты расширения. Затем он отбрасывает часть имени файла и переименовывает файл.
Используйте переименовать -n ...
, чтобы увидеть, что произойдет, или используйте -v
вместо -n
, чтобы наблюдать, как это происходит во время выполнения.
Ваша команда действительно работает так, как ожидалось; вы просите sed вернуть строки 4 и 5 из файла «2input1output». Как видите, позиционные аргументы (, то есть $1, $2 и $3 ), возвращаются, потому что это то, что есть в скрипте.
Что вам нужно сделать, так это сначала запустить сценарий, чтобы получить желаемый вывод (STDOUT ), а затем передать его в потоковый редактор (sed ). Итак, одним нажатием сохранить нужный контент в переменную:
$ MESSAGE=$(./2input1output Jojo Ar Dublin | sed -n 4,5p)
Помните, что если вам нужно сохранить символы новой строки при доступе к переменной, сначала заключите ее в двойные кавычки.
Мы также можем сделать это нижеприведенным методом, используя awk
MESSAGE=`sh 2input1output Jojo Ar Dublin| awk 'NR >3 && NR<=5 {print $0}'
Я думаю, что sed получит пятую строку из вашего скрипта. вы можете отправить вывод в другой файл, а затем sed строки, которые вы хотите оттуда, или в вашем bash сохранить вывод в переменную, а затем grep нужные строки.