Как выполнить поиск нескольких файлов, используя часть имени файла в качестве шаблона?

Похоже, что gpg-агент не понимает понятия "ключ" без парольной фразы. В таком случае, вы вообще не хотите ssh-add ваших ключей без кодовой фразы к gpg-agent, просто дайте SSH найти их самому. Чтобы отменить кэширование, мне нужно было удалить каталог ~/.gnupg; после этого я мог использовать свой незащищенный ключ без всяких проблем. Хотелось бы надеяться, что есть более безопасный способ удалить кэшированные gpg ключи, но я не могу его найти.

1
30.10.2015, 19:57
1 ответ

Вам придется извлечь подстроку ID из имен файлов. Один из способов сделать это - расширить параметры, например. ${var:offset: length}, поэтому в вашем случае var - это filename, offset - 5 (order) и length - ${#f}-9 (то есть, общая длина ${#f} минус суммарная длина порядка и . log, что составляет 9 символов):

for f in order*.log                                                 
  do 
    ID=${f:5:${#f}-9}
    grep -- "$ID" "$f" > "$ID".log
  done

или, если вы предпочитаете однострочный перевод:

for f in order*.log; do ID=${f:5:${#f}-9}; grep -- "$ID" "$f" >" $ID".log; done

В качестве альтернативы вы можете использовать awk для применения одного и того же действия к нескольким файлам:

awk '
FNR==1{
if(fname)close(fname)
id=substr(FILENAME, 6, length(FILENAME)-9)
fname=id".log"
}
$0 ~ id{
print > fname
}
' order*.log

Это делает все файлы одним вызовом awk, избегая цикла оболочки. В одной строке:

awk 'FNR==1{if(f)close(f);id=substr(FILENAME, 6, length(FILENAME)-9);f=id".log"} $0~id{print > f}' order*.log
2
27.01.2020, 23:36

Теги

Похожие вопросы