В ОК:
/^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
С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 .
вbash
:
for f in *; do [[ "$f" =~ ^.+\.mkv ]] && mv "$f" "${BASH_REMATCH[0]}"; done