Вот пример перемещения файлов.
for f in $(find -name index.js | grep __test__ ); do echo $f; destination=$(echo $f | awk 'BEGIN{FS="/"} {print $2}'); mv ${f}./$destination/data.js; done
Я проверял это, движение выполняется, как и ожидалось.
Вопрос не совсем ясен.
Команда
grep -o '(time=[[:digit:]]*)' inputfile
с примером ввода из вопроса печатает
(time=451)
(time=455)
(time=492)
Изменить, чтобы учесть дополнительные требования из комментария:
Для добавления поля даты и времени из начала строк в выходные данные требуется другая команда.
Если все строки ввода содержат (time=...)
и начинаются с полей даты и времени, разделенных одиночными символами пробела, вы можете использовать
sed 's/^\([-0-9]* [:0-9]* \).*\((time=[[:digit:]]*)\).*/\1\2/' inputfile
Это печатает
2020-03-10 06:48:20 (time=451)
2020-03-10 06:48:20 (time=455)
2020-03-10 06:48:20 (time=492)
Если есть другие не соответствующие -строки, вы можете комбинировать это с тем же шаблоном grep
, что и выше, но опустить -o
.
grep '(time=[[:digit:]]*)' inputfile | sed 's/^\([-0-9]* [:0-9]* \).*\((time=[[:digit:]]*)\).*/\1\2/'
Обратите внимание, что шаблон поиска в моей команде sed
не очень строгий.
Часть [-0-9]* [:0-9]*
соответствует любому количеству цифр и тире в любой комбинации (дате ), за которой следует один пробел, любое количество цифр и двоеточий (время ), за которым снова следует символ единое пространство. Шаблон привязывается к началу строки предыдущим ^
.
Таким образом, он также будет соответствовать неправильным полям даты и времени, таким как ---123--456- 9876:54321
, или даже двум пробелам в начале строки.