2015-05-25 2 views
0

Я пытаюсь соответствовать файл прямо сейчас, чтобы изменить имя файлаMatching ровно один пробел внутри, если заявление

tempString="hi" 
end="_hi.pdf" 
for c in *.pdf; do 
tempString="$(echo ${c})" 
if [[ $tempString =~ $AA[0-9][0-9][0-9]\.pdf$ ]] 
    then 
    echo "inside if" 
    tempString="$(echo $tempString | tr -d ' ')" 
    tempString=${tempString%.pdf} 
    mv "%c" "$monthyear$tempString$end" 
fi 
done 

tempString установлен на что-то вроде «AA 111.pdf»

мне нужно, чтобы оно соответствовало чем-то вроде AA 111.pdf, но не AA 111.pdf (одно пространство вместо двух пробелов). Я просто хочу, чтобы он соответствовал точно одному пробелу между AA и 111.

он поддерживает совпадение обоих этих примеров или ни того, ни другого. Я пробовал \ s, [\ s], [: пространство:], [[: пробел:]] и т. д.

Я пробовал искать его везде, но безрезультатно. может кто-нибудь мне помочь?

+0

'\ w + \ d + \. \ w + 'Вы попробовали это – Tushar

ответ

1

Ниже будет соответствовать один (и только один) имена пространства как AA 111.pdf:

if [[ "$tempString" =~ ^AA" "[0-9][0-9][0-9]\.pdf$ ]]; 

Хитрость заключается в том, чтобы quote your spaces внутри регулярного выражения.


Update: Следующий код игнорирует пример двух (и более) пространств:

tempString="AA 111.pdf" 
if [[ "$tempString" =~ ^AA" "[0-9][0-9][0-9]\.pdf$ ]]; then 
    echo "yes" 
else 
    echo "no" 
fi 

Печатает no

версия Однострочник:

tempString="AA 111.pdf"; if [[ "$tempString" =~ ^AA" "[0-9][0-9][0-9]\.pdf$ ]]; then echo "yes"; else echo "no"; fi 
+0

По какой-то причине это все еще захватывает два пробела. Я посмотрел на документ и попробовал старый метод одиночной кавычки. Я определенно попробовал двойное цитирование пространства до и безрезультатно. –

+0

Можете ли вы запустить пример, который я добавил к ответу (как есть), и скажите, какой у вас результат? – higuaro

+0

Я не запускал ваш пример, но я заметил что-то еще. в 4-й строке, когда tempString имеет значение $ {c}. Я сделал это, и он игнорирует лишние пробелы! Таким образом, код работает правильно, но вход неверный. Почему это происходит? Должно быть неправильно с tempString = "$ (echo $ {c})" –

0

попробовать это регулярное выражение [a-zA-z]+ \d+

Demo

, и если вы хотите какой-либо символ перед space использования этого \w+ \d+

, и если вы хотите какой-либо символ до и после space использования этого \w+ \w+

если вы хотите включить расширение файла, вы можете добавить \.pdf$в конце любого regex из выше

+0

Я сказал, что у меня проблема с пробелами. Символы слева и справа не имеют значения. И у меня буквально есть \ .pdf $ IN MY CODE. Я знаю, что он делает. это не помогает вообще. –

Смежные вопросы