Настроить переключатели задач KDE PlasmaShell?

Похоже, вы хотите получить целое число Nв имени файла begin-N.endдля каждого такого имени файла, содержащего строку stringToBeSearched.

Это можно сделать в простом цикле:

for filename in begin-*.end; do
    if grep -qF 'stringToBeSearched' "$filename"; then
        N=${filename%.end}
        N=${N#begin-}
        printf '%s\n' "$N"
    fi
done

Дело в том, что мы не перебираем текст . Текст, содержащий имена файлов (, что является выводом grep -l), очень плохо кодирует все возможные имена файлов в системе Unix, особенно имена файлов, содержащие символы новой строки.

Вместо этого мы позволяем шаблону глобуса begin-*.endрасшириться до правильного списка и перебираем его, проверяя каждый элемент списка с помощью grep, а затем извлекая целое число, когда находим совпадение.

Очевидно, что вы могли бы обернуть это в функции, если хотите:

test_files () {
    local func="$1";   shift
    local string="$1"; shift

    # Looks for the string "$string" in all given files.
    # Calls "$func" with each pathname that contains the string.

    for pathname do
        if grep -qF "$string" "$pathname"; then
            "$func" "$pathname"
        fi
    done
}

foo () {
    # Takes a string on the form "begin-N.end" and
    # extracts and prints "N".

    local tmp="${1%.end}"
    printf '%s\n' "${tmp#begin-}"
}

test_files foo stringToBeSearched begin-*.end

Это более или менее использует простую форму «обратного вызова», посредством которой fooвызывается test_filesдля каждого файла, содержащего определенную строку.

0
20.01.2021, 13:37
0 ответов

Теги

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