UNIX rename with Regex to remove middle string from file names


 
Thread Tools Search this Thread
Top Forums UNIX for Beginners Questions & Answers UNIX rename with Regex to remove middle string from file names
# 1  
Old 02-18-2020
UNIX rename with Regex to remove middle string from file names

Filenames look like this:
Code:
CMRLPCR000020_S235_M.bum
CMRLPCR000021_S238_M.bum
CMRLPCR000022_S2341_M.bum

I want to change it to :

Code:
CMRLPCR000020_M.bum
CMRLPCR000021_M.bum
CMRLPCR000022_M.bum

I tried with regex, but no success
Code:
rename 's\^(CMRLPCR)\d{6}\_(?:.{4})(\.)\^(CMRLPCR)\d{6}\_(\.)\' *.bum

Edited to address comments below.

Last edited by genehunter; 02-18-2020 at 10:07 AM..
# 2  
Old 02-18-2020
Hello genehunter,

Thanks for showing your efforts in form of codes.

But your all shown output sample file names CMRLPCR000020_M.bum are same. Wouldn't it overwrite the file, since all file names are same. Lets say you have renamed 1 file with code and trying the 2nd one now, now when rename command runs it will rename 2nd file and overwrite the first file since first and second file names are same.

Kindly do elaborate your question more clearly and let us know.

Thanks,
R. Singh

Last edited by RavinderSingh13; 02-18-2020 at 05:54 AM..
# 3  
Old 02-18-2020
Yes, sorry.. that was sloppy copy pasting.
Edited to correct it
# 4  
Old 02-18-2020
an ex.:
Code:
ls -1 | grep ".*_.*_.*.bum" | while IFS=_ read a b c ; do mv ${a}_${b}_${c} ${a}_${c} ; done


Last edited by rdrtx1; 02-18-2020 at 07:16 PM..
# 5  
Old 02-18-2020
Thank you for the mv solution.
Can you help doing this using rename function.
the version I have is rename from util-linux 2.23.2, which uses substring match.
Thanks
# 6  
Old 02-18-2020
Hello genehunter,

This could be easily done with bash, could you please try following.
I am using parameter expansion functionality of bash here.

Code:
val="_"
for file in *.bum
do
  first_part_of_new_file="${file%%_*}"
  second_part_of_new_file="${file##*_}"
  echo "mv $file $first_part_of_new_file$val$second_part_of_new_file"
done

Above will print commands to rename the files only as follows. Once you are Happy with above's results then you coudl use actual mv command in above code and could remove echo from it.

Thanks,
R. Singh
# 7  
Old 02-18-2020
Hi
Code:
prename -n 's/^(CMRLPCR\d{6}).*(_[^_]*)$/\1\2/' *.bum

--- Post updated at 19:35 ---

Code:
find *.bum -prune -exec bash -c 'mv $0 ${0//_*_/_}' {} \;

--- Post updated at 19:50 ---

I removed the -prune option and, to be consistent, inserted the "echo" for debug
Code:
find *.bum -exec bash -c 'echo mv $0 ${0//_*_/_}' {} \;

Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. UNIX for Beginners Questions & Answers

Views How to replace a CRLF char from a variable length file in the middle of a string in UNIX?

My sample file is variable length, with out any field delimiters. It has min of 18 chars length and the 'CRLF' is potentially between 12-14 chars. How do I replace this with a space? I still want to keep end of record, but just want to remove these new lines chars in the middle of the data. ... (7 Replies)
Discussion started by: chandrath
7 Replies

2. Shell Programming and Scripting

How to rename multiple file names?

Hi all, I need to rename more file name in one command or script. The files have this structure: XxY - filename.doc where X and Y are numbers and the x is the letter itself. I need to rename these files with this structure: string.S0XEY.filename.doc the string is a suffix that... (8 Replies)
Discussion started by: idro
8 Replies

3. Shell Programming and Scripting

Grep string in files and list file names that contain the string

Hi, I have a list of zipped files. I want to grep for a string in all files and get a list of file names that contain the string. But without unzipping them before that, more like using something like gzcat. My OS is: SunOS test 5.10 Generic_142900-13 sun4u sparc SUNW,SPARC-Enterprise (8 Replies)
Discussion started by: apenkov
8 Replies

4. Linux

Remove newline in middle of string

my file input is with tab as delimiter, and in every line, there would be a skip of line with an unexcepted newline breaker. I'd like to remove this \n and put the information in the same line. INPUT a1 b1b2 c1 c2 d1 a2 b3 c3 d4 OUTPUT a1 b1b2 c1c2 ... (9 Replies)
Discussion started by: kinkichin
9 Replies

5. Shell Programming and Scripting

Rename multiple file names in a directory

I hope some one can help me I have multiple files in a directory with out extension like as below mentioned. But i want to change all the file names along .DDMMYYYYHHMISS format. And all files should have same DDMMYYYYHHMISS. Scenario: direcory name = /vol/best/srcfiles files in a... (4 Replies)
Discussion started by: hari001
4 Replies

6. Shell Programming and Scripting

Unix File - Adding columns in the middle

Hello, I have a comma separated flat file. It contains some 20 columns. I want to add two new columns at position 2,3. So that file will have 22 columns. I am providing here sample data with file having 4 columns. Appreciate your help in finding solution for this. data in input file:... (11 Replies)
Discussion started by: ravi.videla
11 Replies

7. Shell Programming and Scripting

Find and rename long file names (html)

Hi Guys, I need a help. I have 1130 zip files. Each one of them has files including 1 html file with long file name (includes special charactors, Alphabetic and numbers). I have copied all 1130 zip files to my linux system and extracted using below command. Find . -name "*.zip" -exec... (7 Replies)
Discussion started by: Rajmani
7 Replies

8. UNIX for Dummies Questions & Answers

Add string to middle of a file

Hi, I want to write a script that takes a file and a string as params and adds the string to the middle line of the file. Also, I want to output the results back to the original file passed without using temp files. I am very much new to UNIX so this is all a little like black magic to me at... (15 Replies)
Discussion started by: Chiefos
15 Replies

9. Shell Programming and Scripting

add a string in the middle of the file

i want to add a string in a very top of a file without using VI or SED or AWK this is what ive done: (echo '0a'; echo 'LINE OF TEXT'; echo '.'; echo 'wq') | ed -s myfile to add astrng right in the middle i could have count the lines of the file and just chenge the address. ... (6 Replies)
Discussion started by: ciroredz
6 Replies

10. Shell Programming and Scripting

Problem to add the string(without sed & awk) into the middle of file

Hi, I have tried many times to add the string into the first line of the file or the middle of the file but could not find the solution. I first tried by $echo "paki" >> file This code only append paki string at the end of file "file" but how can i add this "paki" into the first line or... (5 Replies)
Discussion started by: ali hussain
5 Replies
Login or Register to Ask a Question