sub199
sub199

Reputation: 5

Add string in filename before pattern

I need to add string in between of filename where a pattern is matched.

Sample filenames:

file_1_my001
file_11_my0012
file_65_my_012

I would like to rename them as:

file_1_my_copied_001
file_11_my_copied_0012
file_65_my_copied_012

Pattern is <any string>0<any string>

My logic was to first fetch the numerical format starting with 0, store in variable as pattern, then search for the variable and replace it by _copied_<variable>. I tried fetching numbers as:

ls | sed -e s/[^0-9]//g

but above command is fetching all numbers in filename eg. 1001, 110012, 65012 I am unable to make it search for numerical format starting with 0. Please guide.

Upvotes: 0

Views: 329

Answers (3)

Sundeep
Sundeep

Reputation: 23667

with perl based rename command:

$ touch file_1_my001 file_11_my0012 file_65_my_012
$ rename -n 's/_?(?=0)/_copied_/' file_*
rename(file_11_my0012, file_11_my_copied_0012)
rename(file_1_my001, file_1_my_copied_001)
rename(file_65_my_012, file_65_my_copied_012)
  • _?(?=0) zero or one instance of _ followed by 0
  • -n option is for dry run, after it looks good, remove the option for actual renaming


If perl based rename is not available, try:

$ for file in file_* ; do echo mv "$file" $(echo "$file" | sed 's/_\?0/_copied_0/'); done
mv file_11_my0012 file_11_my_copied_0012
mv file_1_my001 file_1_my_copied_001
mv file_65_my_012 file_65_my_copied_012

If it is okay, change echo mv to mv for actual renaming


If optional _ before 0 is not present, it is easier to use parameter expansion

$ touch file_1_my001 file_11_my0012 file_65_my012
$ for file in file_* ; do echo mv "$file" "${file/0/_copied_0}"; done
mv file_11_my0012 file_11_my_copied_0012
mv file_1_my001 file_1_my_copied_001
mv file_65_my012 file_65_my_copied_012

Upvotes: 1

nu11p01n73R
nu11p01n73R

Reputation: 26667

Something like,

$ sed -E "s/(.*[^0-9]+)(0[0-9]*)/\1_copied_\2/"

Upvotes: 0

Ipor Sircer
Ipor Sircer

Reputation: 3141

ls | sed -e 's/\([_]*0\)/_copied_0/' 

Upvotes: 0

Related Questions