Регулярное выражение в grep -E не работает, как ожидалось - PullRequest
3 голосов
/ 06 февраля 2012

Я работаю над сценарием оболочки bash, который просматривает папку и в конечном итоге создает новые каталоги на основе имен файлов.Теперь я хочу просмотреть каждый файл и удалить ненужные слэши пути и игнорировать расширение файла перед созданием нового каталога.Чтобы проверить это, я повторяю свой файл так:

#!/bin/sh

cpath=`pwd`
for file in $cpath/*;do
echo $file | grep -E '(?!.*/).+(?=\.)'
done

Но grep отфильтровывает все, и я не получаю вывод.Я разработал регулярное выражение с RegExr http://gskinner.com/RegExr/?2vu6b
Отрицательный прогноз, соответствующий последней косой черте, и позитивный прогноз, соответствующий последней точке.

1 Ответ

2 голосов
/ 06 февраля 2012

Я не уверен, является ли Negative lookahead частью Extended RE. Но вы можете сделать что-то вроде этого -

#!/bin/bash

for file in $PWD/*; do
basename "${file%.*}"
done 
...