Удалить все символы после расширения файла

В ОК:

/^define service/{

    found_command=0
    found_host=0

    while (getline && $0 !~ "^}") {

        # test host
        if($1 == "host_name") {
            if ($2 == new_host) {
                found_host=1
            }else{
                next
            }
        }

        # test check_command
        if($1 == "check_command"){
            cmd = gensub(/^\s*check_command\s*/, "", 1)
            if (cmd == new_command) {
                found_command=1
            }else{
                next
            }
        }
    }

    if (found_command && found_host)
        exit 1
}

можно использовать так:

new_host='...'
new_command='...'
if awk -v new_host="$new_host" -v new_command="$new_command" -f script.awk cfg_file ; then
    echo "you can register it now"
fi
1
27.05.2021, 11:25
2 ответа

Сzshсzmv:

autoload zmv
zmv -v '(*.mkv)*' '$1'

Удаляет часть после самого правого вхождения .mkvв имени файла (переименовывает foo.mkv-bar.mkv-whateverвfoo.mkv-bar.mkv).

Для самого левого вхождения (, чтобы переименовать этот файл в foo.mkvвместо ), вы можете заменить *.mkvна *.mkv~*.mkv?*, который соответствует строке, заканчивающейся на .mkv, но которая также в противном случае не содержит .mkv, за которым следует по крайней мере один символ с использованием ~"кроме" оператора glob .

1
28.07.2021, 11:29

вbash:

for f in *; do [[ "$f" =~ ^.+\.mkv ]] && mv "$f" "${BASH_REMATCH[0]}"; done
1
28.07.2021, 11:29

Теги

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