grep для одного шаблона, но не для другого

Прежде всего, $(command_string)выдаст ошибку «bash :команда _строка :команда не найдена» как подстановка команды.Подстановка команды запустит команду в скобках и заменит все это выводом этой команды.

Во-вторых, даже если вы использовали только $command_stringдля выполнения своей команды, вы все равно добавляете одинарные кавычки к именам файлов. В именах файлов нет одинарных кавычек.

В общем, просто избегайте помещать команды в переменные. См. «Как мы можем запустить команду, хранящуюся в переменной? ».

Вместо этого может быть что-то вроде этого:

#!/bin/bash

for pathname in tracks/*; do
    if [[ "$pathname" =~ ([0-9]+)[[:blank:]]* ]]; then
        newpathname="${pathname%/*}/${BASH_REMATCH[1]}"
        printf 'Would move "%s" to "%s"\n' "$pathname" "$newpathname"
        # mv -i "$pathname" "$newpathname"
        break
    fi
done

Этот цикл делает (Я думаю )то, что вы пытаетесь сделать. Я закомментировал часть, которая фактически переименовывает файл для безопасности.

0
07.08.2020, 19:44
1 ответ

Если вы можете быть уверены, что первый символ является буквой (, вы также не проверяли это):

grep '^[^#].*[0-9]' file.txt
1
18.03.2021, 23:14

Теги

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