Hi, I am trying to switch from windows to linux.
I have been using Autohotkey scripts for some little things.
I started writing some bash scripts for NEMO browser in linux mint and I am trying to convert some of AHK scripts but as I am not a programmer. I have a hard time with regex stuff.
What I did is split file path and I got it working ok. -- Directory, FileName, Filename-Without-Extension, Extension
Now every filename may or may not contain [tags], {labels} and (description) in brackets at the end of the filename.
Where I am stuck is regex that works in Autohotkey is not in BASH. I tried sed, awk, but I have no idea what I am doing.
example filename:
multiple.{1}(1)[1] dots.and spaces {labels}(description)[tag1 tag2].txt
filename with only tags [tag1 tag2 tag3].txt
Note:
Tags, labels or description can be any words or numbers, not just what I have in example.
Not every filename will have all 3. Some could have only tags, others only descriptions or labels.
need to split and get this:
shortName = "multiple.{1}(1)[1] dots.and spaces" -- filename without any tags,labels and descriptions
tags = "tag1 tag2" -- tags without brackets
labels = "label" -- labels without brackets
description = "description" -- description without brackets
Original regex from Autohotkey that works in all of my scripts
; NameNoExt is filename without extension
; get filename only without tags[], labels{} or description()
ShortName:=RegExReplace(NameNoExt, "\s*(\([^()]+\)|{[}]+|\[[^][]+\])+$")
; Get tags
Tags:=RegExReplace(NameNoExt, ".*\[(.*)?\](?!\s).*$", "$1")
; Get labels
Label:= RegExReplace(NameNoExt, ".*\{(.*)?\}(?!\s).*$", "$1")
; Get description
Description := RegExReplace(NameNoExt, ".*\((.*)?\)(?!\s).*$", "$1")
Here is what I have in BASH .. and it is going nowere..
So to mention again, this is where I need help with regex splitting these tags, labels and descriptions.
str="multiple.{1}(1)[1] dots.and spaces {lab}(desc)[tag1 tag2].txt"
IFS='
'
NameNoExt=`echo "${str%.*}"` # for filename with multiple dots
shortName="???" # get "multiple.{1}(1)[1] dots"
#regexp=".*\[(.*)?\](?!\s).*$" # from autohotkey
regexp="\[([^)]+)\]+$"
if [[ $NameNoExt =~ $regexp ]]
then
TAG="${BASH_REMATCH[1]}"
else
TAG="Nothing"
fi
#regexp=".*\{(.*)?\}(?!\s).*$" # from autohotkey
regexp="\{([^}]+)\}+$"
if [[ $NameNoExt =~ $regexp ]]
then
LAB="${BASH_REMATCH[1]}"
else
LAB="Nothing"
fi
#regexp=".*\((.*)?\)(?!\s).*$" # from autohotkey
regexp="\(([^)]+)\)+$"
if [[ $NameNoExt =~ $regexp ]]
then
DESC="${BASH_REMATCH[1]}"
else
DESC="Nothing"
fi
zenity --info --text "`printf "Input = \"$str\"\n\nNameNoExt = \"$NameNoExt\"\nShort Name = \"$shortName\"\nTags = \"$TAG\"\nLabels = \"$LAB\"\nDescription = \"$DESC\""`"
I highly appreciate any help with this.
Thank you all.