Get Substring from file name.


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Get Substring from file name.
# 8  
Old 03-17-2013
If the files contain 1 extra digit (for instance a version number somewhere) then most of these methods will not render the correct results. You could select on the basis of how many digits need to be minimally present, for example 4:
Code:
IFS=_.
for file in *_*[0-9][0-9][0-9][0-9]*_*.*
do
  set -- $file
  for i do
    case $i in (*[0-9][0-9][0-9][0-9]*)
      printf "%d\n" "$i"
    esac
  done
done
IFS=$oldIFS

or
Code:
IFS=_.
for file in *_*[0-9][0-9][0-9][0-9]*_*.*
do
  for i in $file
  do
    case $i in (*[0-9][0-9][0-9][0-9]*)
      printf "%d\n" "$i"
    esac
  done
done
IFS=$oldIFS

Or:
Code:
ls | sed -n 's/.*_\([0-9]\{4,\}\)_.*\..*/\1/p'


Last edited by Scrutinizer; 03-17-2013 at 06:50 AM..
This User Gave Thanks to Scrutinizer For This Post:
# 9  
Old 03-17-2013
Quote:
Originally Posted by hanson44
Here is one way to extract the number from those files:
Code:
 for i in *; do
  j=`echo $i | sed 's/.*_\([0-9]\+\).*/\1/'`
  echo $j
done

Code:
 for i in *; do
  j=`echo $i | sed -r 's/.*_([0-9]+).*/\1/'`
  echo $j
done

Because * is 0 or more, _[0-9]* was picking up the first '_' instead of the one before '2'. And you have to use \1 to do the replacement.
The above ones does not seem to be working. Please see below:

Code:
echo $i | sed 's/.*_\([0-9]\+\).*/\1/'
adio_idfl_201302_df.txt


Code:
echo $i | sed -r 's/.*_([0-9]+).*/\1/'
sed: illegal option -- r
Usage:  sed [-n] [-u] Script [File ...]
        sed [-n] [-u] [-e Script] ... [-f Script_file] ... [File ...]

Thanks for the help though.

---------- Post updated at 11:36 AM ---------- Previous update was at 11:33 AM ----------

Quote:
Originally Posted by elixir_sinari
You don't need sed to do such a simple task (provided your shell is capable of doing the following):
Code:
i='adio_idfl_201302_df.txt'
 
echo "${i//[!0-9]/}"
201302


Looks like my shell is not capable of doing this.

Code:
"${i//[!0-9]/}": bad substitution

---------- Post updated at 11:38 AM ---------- Previous update was at 11:36 AM ----------

Quote:
Originally Posted by anbu23
Code:
$ ls
adio_idfl_201302_df.txt  dalkd_20130301.csv  dfa_201301_dll.ctl
$ ls | tr -dc [:digit:]
20130220130301201301
$ ls | tr -dc '[\n[:digit:]]'
201302
20130301
201301


Thanks this is working.

---------- Post updated at 11:38 AM ---------- Previous update was at 11:38 AM ----------

Code:
ls | sed -n 's/.*_\([0-9]\{4,\}\)_.*\..*/\1/p'

Thanks I will be using the above code.
# 10  
Old 03-17-2013
Quote:
Originally Posted by pinnacle
The above ones does not seem to be working. Please see below:

Code:
echo $i | sed 's/.*_\([0-9]\+\).*/\1/'
adio_idfl_201302_df.txt

The reason for the failure is that the highlighted portion of the regular expression is a GNU extension.

I see no reason to limit one's options by ever using \+. It may be a bit longer, but \{1,\} works everywhere.

Regards,
Alister
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Match substring from a column of the second file

I want to merge the lines by matching substring of the first file with first column of the second file. file1: S00739A_ACAGTG_L001_R1.fq.gz S00739A_ACAGTG_L001_R2.fq.gz S00739B_GCCAAT_L001_R1.fq.gz S00739B_GCCAAT_L001_R2.fq.gz S00739D_GTGAAA_L001_R1.fq.gz S00739D_GTGAAA_L001_R2.fq.gz... (14 Replies)
Discussion started by: yifangt
14 Replies

2. Shell Programming and Scripting

Extract a substring from a file

Hello, A question please. A have a file that contains a string. Ex: AAAABBCCCCCDDEEEEEEEEEEFF I'd want to recover 2 substrings, 'BB' and 'FF' and then leave them in a new file. From position 5, 2 caracters (ex:"BB") and from position 25, 2 caracters (ex:"FF") in a file. Could anoyone help me... (3 Replies)
Discussion started by: nolo41
3 Replies

3. Shell Programming and Scripting

Extract substring in a file

Hello, A question please. A have a file that contains a string. Ex: AAAABBCCCCCDDEEEEEEEEEEFF I'd want to recover 2 substrings, 'BB' and 'FF' and then leave them in a new file. Could anoyone help me please? Thanks in advance (3 Replies)
Discussion started by: nolo41
3 Replies

4. UNIX for Dummies Questions & Answers

Deleting file basing on the timestamp substring in the file name

Hello, I have in my backup folder, files with names convention like this : randomFileNames_13-02-2014_23h13m09+1392333189 randomFileNames_14-02-2014_02h13m09+1392343989 randomFileNames_14-02-2014_04h13m09+1392351189 etc.... Base on timestamp at end of the filename, I would to delete all the... (7 Replies)
Discussion started by: thuyetti
7 Replies

5. Shell Programming and Scripting

Substring from the file name

Hi I need substring from the file name of list of files. I mean i will have to load all the files into database which are there in the Directory. I need to make the directory with the date(which is substring of the filename Eg: Filename_Name_2012013001010101.txt, So the directory should be... (11 Replies)
Discussion started by: cnrj
11 Replies

6. Shell Programming and Scripting

Get value of substring from a file

Hi, I have a file with a long string, in the format: name1=value,name2=value2.....namen=valuen I want to query the file and extract 'value2' ONLY. name2=value2 can exist anywhere within the file. Can anyone help me please wth a suitable BASH command? Many thanks, Matt (4 Replies)
Discussion started by: mjwoodford
4 Replies

7. Shell Programming and Scripting

How do I pull a substring out of a file?

I'm new to shell scripting and am trying to write a small script that pulls a substring out of a file that has a few lines of text in it. The file will eventually have a lot of text, I just put a few lines in it for testing purposes. Anyway, this is what I have so far... #!/bin/ksh ... (4 Replies)
Discussion started by: enator45
4 Replies

8. Shell Programming and Scripting

Help on substring of file list

Hi, I have a folder list as below, I want to write a script to return a list like: CASTLE_BU_20080801 CAUSEWAY_BU_20080801 HUNGHOM_BU_20080801 : : Can anyone help? Thanks! Victor Cheung List of the folder: # ls CASTLE_BU_20080801.DMP OFFICE_MY1_BU_20080801.DMP... (1 Reply)
Discussion started by: victorcheung
1 Replies

9. Shell Programming and Scripting

extracting substring from a file name

hi i need to name a file with a substring of a another file name. i.e. if the old filename is abc.txt , the new filename should be abc_1.txt i should get the substring of the file name and then name the new one please let me know how to do it (4 Replies)
Discussion started by: adityamahi
4 Replies

10. Shell Programming and Scripting

Calling a substring from another file

I have two files: One is a list of numbers: 1 5 6 7 10 The second is a very long string abcdefghijklmno......1234567890 I'd like to print a new file with a 5 character substring that starts at each the positions listed in the 1st file: such as: abcde (4 Replies)
Discussion started by: dcfargo
4 Replies
Login or Register to Ask a Question