я пытаюсь иметь регулярное выражение, которое изменится "dir1/dir2/" на "dir1/dir3/" только если dir2 не tmp, а если tmp, я хочу, чтобы оно не изменилось и осталось "dir1/tmp".
"dir1/dir2/"
"dir1/dir3/"
dir2
tmp
"dir1/tmp"
Я думаю, что мне нужно регулярное выражение, но я не могу справиться.
Вы можете использовать отрицательное прогнозное утверждение, чтобы выполнить подстановку, только если после /dir1:
/dir1
s#(dir1/)(?!tmp/)[^/]+#\1/dir3#;
см.
s{^([^/]+)/(?!tmp/)[^/]+/}{$1/dir3/}
Вы можете использовать оператор if перед применением проверки s //// ...., используя m //, если tmp не существует, а затем заменить.