BG Development


Страници: (3) [1] 2 3   ( Първото ново мнение ) Reply to this topicStart new topicStart Poll

> Лесен скрипт, малко хелп.
makka89
Публикувано на: 03-05-2018, 21:58
Quote Post



Име:
Група: Потребител
Ранг: Посетител

Мнения: 139
Регистриран на: 22.11.16



Здравейте опитвам се да направя скрипт ,който да връща файлове в дадена директория които започват с главна буква , или пък имат разширение повече от четири символа ... Но нещо не се получава,нов съм в баша и линукс като цяло ,ще ме извинявате ,ако това което ,ще видите ,ще ви избие на агресия! : )

CODE
#!/bin/bash

cd /Desktop

for f in *; do
   if [[ $f == +([[:upper:][:digit:]]).+([[:lower:]]) ]]; then
       echo "OK: $f"
   else
       echo "**: $f"
   fi
done
PMEmail Poster
Top
kierenski
Публикувано на: 04-05-2018, 07:09
Quote Post



Име:
Група: Потребител
Ранг: Активен

Мнения: 260
Регистриран на: 10.01.16



Това ще ти реши пъвата част от проблема с първата главна буква
CODE

#!/bin/bash
cd /Desktop
ls | egrep '^[A-Z]'
PMEmail Poster
Top
makka89
Публикувано на: 04-05-2018, 14:05
Quote Post



Име:
Група: Потребител
Ранг: Посетител

Мнения: 139
Регистриран на: 22.11.16



QUOTE (kierenski @ 04-05-2018, 07:09)
Това ще ти реши пъвата част от проблема с първата главна буква
CODE

#!/bin/bash
cd /Desktop
ls | egrep '^[A-Z]'

Благодаря , и аз пробвах така ,но вместо egrep само с grep и не се получи.
PMEmail Poster
Top
erazor
Публикувано на: 04-05-2018, 19:07
Quote Post



Име: Димитър
Група: Потребител
Ранг: Старо куче

Мнения: 618
Регистриран на: 26.06.07



CODE
grep -E "^[A-Z].*\.(.){4}"


edit:
Сега видях че търсиш с главна буква "или" 4 символа разширение, значи това:

CODE
grep -E "^[A-Z]|.*\.(.){4}+"


Тия истории с bash regex-а не можах да ги схвана, ама би трябвало да може да преведеш горния на "bash" и да получиш същия резултат.

Наскоро четох това за grep, и ми хареса как са го структурирали, доста полезно четиво

https://www.digitalocean.com/community/tuto...tterns-in-linux

Това мнение е било редактирано от erazor на 04-05-2018, 19:16
PMEmail PosterICQ
Top
makka89
Публикувано на: 04-05-2018, 21:17
Quote Post



Име:
Група: Потребител
Ранг: Посетител

Мнения: 139
Регистриран на: 22.11.16



QUOTE (erazor @ 04-05-2018, 19:07)
CODE
grep -E "^[A-Z].*\.(.){4}"


edit:
Сега видях че търсиш с главна буква "или" 4 символа разширение, значи това:

CODE
grep -E "^[A-Z]|.*\.(.){4}+"


Тия истории с bash regex-а не можах да ги схвана, ама би трябвало да може да преведеш горния на "bash" и да получиш същия резултат.

Наскоро четох това за grep, и ми хареса как са го структурирали, доста полезно четиво

https://www.digitalocean.com/community/tuto...tterns-in-linux

Благодаря ти наистина доста добро представяне за възможностите на grep.
PMEmail Poster
Top
gat3way
Публикувано на: 06-05-2018, 11:08
Quote Post



Име:
Група: Потребител
Ранг: Почетен член

Мнения: 2434
Регистриран на: 22.06.12



Това с регулярни изрази ще видиш зор да го направиш, първо защото не е 4-символни разширения, а всички от 4 и нагоре и второ защото разширението не е след първата срещната точка, а след последната - в името на файла може да има много точки. Имам предвид, някой гуру на регексповете сигурно ще го сътвори това все пак, но на мен ми идва нагоре и надали щях да го мисля така. Ако трябваше да го правя под формата на шел скрипт, сигурно с регулярен израз щях да хвана тези дето започват с главна буква и после от тях с awk и сепаратор точка, щях да отделя последния подниз и да проверя дали е по-дълъг от 4 символа. И двете неща могат да станат с awk, алтернативно ако трябва да се правиш на скриптаджия, може с awk и wc и полученото да го проверяваш дали е по-голямо от 3 в скрипта.
PMEmail Poster
Top
Dr.Who
Публикувано на: 06-05-2018, 15:26
Quote Post



Име:
Група: Потребител
Ранг: Редовен член

Мнения: 315
Регистриран на: 25.05.14



CODE
for f in [A-Z]* *.????*; do echo $f; done | sort | uniq


или
CODE
find -maxdepth 1 -name '[A-Z]*' -or -name '*.????*'


само не мога да разбера защо [A-Z]* вади файлове с малки букви.
PMEmail Poster
Top
gat3way
Публикувано на: 06-05-2018, 16:18
Quote Post



Име:
Група: Потребител
Ранг: Почетен член

Мнения: 2434
Регистриран на: 22.06.12



QUOTE (Dr.Who @ 06-05-2018, 15:26)
CODE
for f in [A-Z]* *.????*; do echo $f; done | sort | uniq


или
CODE
find -maxdepth 1 -name '[A-Z]*' -or -name '*.????*'


само не мога да разбера защо [A-Z]* вади файлове с малки букви.

Не е толкова просто, това ще ти match-не примерно Xorg.conf.old - но разширението е от три символа.
PMEmail Poster
Top
gat3way
Публикувано на: 06-05-2018, 23:08
Quote Post



Име:
Група: Потребител
Ранг: Почетен член

Мнения: 2434
Регистриран на: 22.06.12



ОК, ето решение, доста недодялано:

CODE

for a in `ls | grep "^[A-Z].*"`; do len=`echo $a | awk -F . '{print length($NF)}'`;num=`echo $a | awk -F . '{print NF}'`; if [ "$len" -gt "3" ] && [ "$num" -gt "1" ];then echo $a; fi; done


Естествено това е чисто безумие, за всеки файл дето почва с главна буква викаш два пъти echo и awk, разбира се може и още по-бавно да се направи хаха, но и така си е добре icon_smile.gif
PMEmail Poster
Top
wqw
Публикувано на: 07-05-2018, 10:06
Quote Post


Group Icon
Име: Владимир Висулчев
Група: VIP
Ранг: Почетен член

Мнения: 5723
Регистриран на: 10.06.04



CODE
# ls | grep -E "^[A-Z]|\.[^.]{4,}$"

^[A-Z] е ясно: ^ -- в началото, [A-Z] -- главна.

Pipe ти е OR.

Втората част е така: \. -- има точка, [^.] -- не е точка, {4,} -- четири или повече пъти, $ -- в края

cheers,
</wqw>


--------------------
PMEmail PosterUsers Website
Top
1 потребители преглеждат тази тема в момента (1 гости, 0 анонимни потребители)
Потребители, преглеждащи темата в момента:

Topic Options Страници: (3) [1] 2 3  Reply to this topicStart new topicStart Poll

 


Copyright © 2003-2018 | BG Development | All Rights Reserved
RSS 2.0