Removing Part of a variable based on a pattern


 
Thread Tools Search this Thread
Top Forums UNIX for Dummies Questions & Answers Removing Part of a variable based on a pattern
# 1  
Old 09-29-2011
Removing Part of a variable based on a pattern

Hi All,

I am writing a script to work with files in a folder.

The files are all in the following patterns (without quotes):

"some filename - NxNN - the end.YYY"

or

"some filename - NNxNN - the end.YYY"

Where N = a single number and YYY is the extension.

Basically what I want to do is put (without quotes) "some filename" into a variable, for further processing in the script. "some filename" and "the end" can be any length.

I can do it if I know in advance whether the file contains NxNN or NNxNN, but I can't figure out how to script it so that either pattern works.

e.g.

Code:
the_var=${filename% - [0-9]x[0-9][0-9] - *}

Specific example.

Files in directory :

first log - 1x05 - testing.txt
second file - 13x25 - logging.log
third from start - 3x03 - something.lst

Code:
home_dir=/Users/someone/
extracted_name=""

ls $home_dir | while read file_name
do
  ****extract start of file*****
  echo $extracted_name
done

Output should read :

first log
second file
third from start

Any ideas?
# 2  
Old 09-29-2011
It's rather simple:
Code:
$ ls -l
total 0
-rw-r--r--   1 xxxx    xxxxx         0 Sep 29 16:03 first log - 1x05 - testing.txt
-rw-r--r--   1 xxxx    xxxxx         0 Sep 29 16:03 second file - 13x25 - logging.log
-rw-r--r--   1 xxxx    xxxxx         0 Sep 29 16:03 third from start - 3x03 - something.lst
$ for f in *; do printf '%s\n' "${f%% - *}"; done
first log
second file
third from start

This User Gave Thanks to radoulov For This Post:
# 3  
Old 09-29-2011
Code:
$ ls *.* | nawk -F- '{print $1}'
first log
second file
third from start
$

This User Gave Thanks to jayan_jay For This Post:
# 4  
Old 09-29-2011
hey, thanks guys.

I just realised I forgot something in my original post.

some files may be as such:

file name - something - NxNN - something.xxx or NNxNN

so I would need "file name - something" from that case.

and I need to feed it into a variable, as opposed to write it to the screen.
# 5  
Old 09-29-2011
The array manipulation syntax varies between shells,
this is with bash (ksh93 and zsh support that syntax too):

Code:
$ ls -1
file name - something - NNxNN - something.xxx
file name - something - NxNN - something.xxx
$ unset files
$ for f in *; do files[++i]=${f% - * - *}; done
$ printf '%s\n' "${files[@]}"
file name - something
file name - something

This User Gave Thanks to radoulov For This Post:
# 6  
Old 09-29-2011
Quote:
Originally Posted by radoulov
The array manipulation syntax varies between shells,
this is with bash (ksh93 and zsh support that syntax too):

Code:
$ ls -1
file name - something - NNxNN - something.xxx
file name - something - NxNN - something.xxx
$ unset files
$ for f in *; do files[++i]=${f% - * - *}; done
$ printf '%s\n' "${files[@]}"
file name - something
file name - something

Hi, Thanks.

That does exactly the job.

I can work with them in a variable. Smilie
 
Login or Register to Ask a Question

Previous Thread | Next Thread

9 More Discussions You Might Find Interesting

1. UNIX for Dummies Questions & Answers

Removing PATTERN from txt without removing lines and general text formatting

Hi Everybody! First post! Totally noobie. I'm using the terminal to read a poorly formatted book. The text file contains, in the middle of paragraphs, hyphenation to split words that are supposed to be on multiple pages. It looks ve -- ry much like this. I was hoping to use grep -v " -- "... (5 Replies)
Discussion started by: AxeHandle
5 Replies

2. Shell Programming and Scripting

Discard part of a file based on a pattern ---

I have the file: s3_T0(2) Pos "1" "2" s1_T1(2) Pos "1" "2" --- 0 0 1 0 0 1 1 1 --- 1 2 "tau0" 1 2 "h10" I want to patternmatch on --- and get only the third part i.e. 1 2 "tau0" 1 2 "h10" I wanted to start simple but even something like (5 Replies)
Discussion started by: eagle_fly
5 Replies

3. Shell Programming and Scripting

Splitting textfile based on pattern and name new file after pattern

Hi there, I am pretty new to those things, so I couldn't figure out how to solve this, and if it is actually that easy. just found that awk could help:(. so i have a textfile with strings and numbers (originally copy pasted from word, therefore some empty cells) in the following structure: SC... (9 Replies)
Discussion started by: luja
9 Replies

4. UNIX for Dummies Questions & Answers

Find next line based on pattern, if it is similar pattern skip it

Hi, I am able to get next line if it is matching a particular pattern. But i need a way to skip if next line also matches same pattern.. For example: No Records No Records Records found got it Records found Now i want to find 'Records found' after 'No Records' pattern matches.. ... (5 Replies)
Discussion started by: nagpa531
5 Replies

5. Shell Programming and Scripting

Removing folders with specific name/part

Hi, I need a way to remove all folders that contain "Quick" in their names in a directory called /var/tmp... However all attemps I have tried won't work. :wall: I so far tried find /var/tmp -type d -name "Quick" | sudo xargs rm -rf find . -name "Quicklook" -exec rm -rf {} \; find .... (2 Replies)
Discussion started by: pasc
2 Replies

6. Shell Programming and Scripting

removing part of a file

Right this is quite a long one, I have a script which complies all listed stats files into one file and emails it out, However this has to be run manually and i would like it to run automatically, I have a list of files eg sa17 sa18 sa19 sa20 sa21 one file for each of last weeks... (9 Replies)
Discussion started by: Bdoydie
9 Replies

7. UNIX for Dummies Questions & Answers

sed or awk - removing part of line?

hi all, I am having trouble finding the right string for this - I dont know whether to use awk or sed.. If I have a file with alot of names and phone numbers like this McGowan,Sean 978-934-4000 Kilcoyne,Kathleen 603-555-1212 Club603,The 617-505-1332 Boyle,William 301-444-1221 And... (11 Replies)
Discussion started by: alis
11 Replies

8. Shell Programming and Scripting

Print a pattern between the xml tags based on a search pattern

Hi all, I am trying to extract the values ( text between the xml tags) based on the Order Number. here is the sample input <?xml version="1.0" encoding="UTF-8"?> <NJCustomer> <Header> <MessageIdentifier>Y504173382</MessageIdentifier> ... (13 Replies)
Discussion started by: oky
13 Replies

9. Shell Programming and Scripting

find the line starting with a pattern and save a part in variable

Hi i have a file which has mutiple line in it. inside that i have a pattern similar to this /abc/def/hij i want to fine the pattern starting with "/" and get the first word in between the the symbols "/" i.e. "abc" in this case into a variable. thanks in advance (13 Replies)
Discussion started by: kichu
13 Replies
Login or Register to Ask a Question