Вы очень близки к рабочему решению. Вот один из способов сделать это (, отформатированный для удобочитаемости):
awk '{
match($0,/F2/);
a=substr($0, RSTART +2, RLENGTH +3);
match($0,/F6/);
b=substr($0, RSTART +2,RLENGTH +4);
print a" "b
}'
В этом случае я беру две ваши substr()
функции и назначаю их переменным, вместо того, чтобы печатать их напрямую, а затем просто настраиваю их на одновременную печать в конце. Распечатывая их в одном вызове печати, awk
добавляет только один символ новой строки в конце строки, а не после каждой части строки, что разделяло ваш результат на две строки.
bash:~$ echo F1B308F2B3094F3B310F4B317CF5B312F6BC313DF7B315 | awk '{match($0,/F2/); a=substr($0, RSTART +2, RLENGTH +3); match($0,/F6/); b=substr($0, RSTART +2,RLENGTH +4); print a" "b}'
B3094 BC313D
Вам не нужно направлять вывод ls в grep. В Grep для этого есть встроенная опция.
grep -rle 'EXEC_EC'
-l будет только список файлов -r рекурсивные средства будут проходить через все файлы, начиная с вашего текущего пути -e после этого grep ожидает, что ваш шаблон будет строкой
Нет смысла использовать grep
для фильтрации, если вы все равно используете find
.
find. -mindepth 1 -maxdepth 1 -name '*EXEC_EC*' -mtime +7
По умолчанию find
обходит все поддерево (, т. е. содержимое всех подкаталогов ). -mindepth 1 -maxdepth 1
предотвращает это, так как пример работает только с содержимым одного каталога. -mindepth 1
заставляет find
игнорировать аргументы каталога (в данном случае .
, не обязательно, но в общем случае ). -maxdepth 1
предотвращает спуск в подкаталоги.
Это то, что вы ищете?
$ find. -name '*EXEC_EC*' -mtime +7 -print
. = Представляет ваш текущий каталог, вы можете заменить его путем к каталогу.
-mtime -Представляет время модификации файла и используется для поиска файлов старше 7 дней.