Linux rename with regular expression


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Linux rename with regular expression
# 1  
Old 11-07-2017
Linux rename with regular expression

Hello,

I have the following filenames
Code:
Instruments_20171004.csv_11-03-2017_20:01:06.gz
Instruments_20171030.csv.gz
Orders_0024_20171103.csv_11-03-2017_20:01:05.gz

I like to change the filenames as:
Code:
Instruments_20171004.csv_11-03-2017_20-01-06.gz
Instruments_20171030.csv.gz
Orders_0024_20171103.csv_11-03-2017_20-01-05.gz

I'm trying to replace the ":" with "-"
I tried the following
Code:
rename -v 's/\:/-/g' *2017*.csv_*.gz

It did not throw any error but did not rename the filenames.
Linux <servername> 2.6.18-422.el5 #1 SMP x86_64 x86_64 x86_64 GNU/Linux

Appreciate your help in correcting my code.

Last edited by bobbygsk; 11-07-2017 at 11:08 AM..
# 2  
Old 11-07-2017
You must be using the rename utility normally provided by the util-linux-ng. The command you are using might work for the Perl script with the same name.

Alternatively, this might be of value:
Code:
ls *2017*.csv_*.gz  | perl -lne '$o=$_; rename $o, $_ if s/:/-/g'

This User Gave Thanks to Aia For This Post:
# 3  
Old 11-07-2017
Already provided it.
# 4  
Old 11-07-2017
Try
Code:
for FN in *2017*.csv_*; do echo mv "$FN" "${FN//:/-}"; done
mv Instruments_20171004.csv_11-03-2017_20:01:06.gz Instruments_20171004.csv_11-03-2017_20-01-06.gz
mv Orders_0024_20171103.csv_11-03-2017_20:01:05.gz Orders_0024_20171103.csv_11-03-2017_20-01-05.gz

remove echo if happy with result.
These 2 Users Gave Thanks to RudiC For This Post:
# 5  
Old 11-07-2017
To avoid a "files are identical" error better ensure that the source file has a : character
Code:
for FN in *2017*.csv_*:*; do ...

BTW the // modifier works in bash and zsh and ksh93.

Last edited by MadeInGermany; 11-07-2017 at 12:01 PM..
This User Gave Thanks to MadeInGermany For This Post:
# 6  
Old 11-07-2017
Hi, bobbygsk .

It's always useful to tell us your OS and shell. As Aia pointed out, there are differences in command rename depending on the distribution.

If you still need advice, perhaps one of these possibilities may be useful:
Code:
Rename multiple files, groups of files

        1) rename -- Debian version and RedHat version differ, q.v.
           (try package util-linux:
           http://en.wikipedia.org/wiki/Util-linux)

        2) ren -- RedHat relatives

        3) renameutils -- package contains qmv, imv, icp, qcp, and deurlname

        4) mved -- (circa 2006; good as of 2017.11), perl
           http://raf.org/mved/
           (An earlier shell version may be available.)

        5) rename -- perl builtin library routine (DIY)

        6) mmv -- move/rename/copy/append/link multiple files by wildcard patterns

        7) gprename - batch rename using a GUI (Gnome)

        8) krename - batch rename using a GUI (KDE)

Best wishes ... cheers, drl
This User Gave Thanks to drl For This Post:
# 7  
Old 11-07-2017
Thanks all for you time and your help.

I'm trying to get files from linux to Windows 7 using WinSCP application through batch script (MS-DOS batch script)

I have files with extension "*.gz" in linux.
I gunzip those files during sftp using winscp by exclamation - "! <linux commands>"
However, my logs shows that the filenames are read as
Code:
Orders_0024_20171103.csv_11-03-2017_20%3A01%3A05 
Instruments_20171004.csv_11-03-2017_20%3A01%3A06

instead of
Code:
Orders_0024_20171103.csv_11-03-2017_20:01:05 
Instruments_20171004.csv_11-03-2017_20:01:06

I'm looking something simpler just like Aia provided.
Aia's code works and I'm using his code.

If there is any simpler, I like to use that code.

Thanks all for your help and time.

---------- Post updated at 02:17 PM ---------- Previous update was at 02:12 PM ----------

Quote:
Originally Posted by drl
Hi, bobbygsk .

It's always useful to tell us your OS and shell. As Aia pointed out, there are differences in command rename depending on the distribution.
Already provided earlier. Except for servername and timestamp, I provided everything

Quote:
Linux <servername> 2.6.18-422.el5 #1 SMP <timestamp> x86_64 x86_64 x86_64 GNU/Linux
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. UNIX for Advanced & Expert Users

sed: -e expression #1, char 0: no previous regular expression

Hello All, I'm trying to extract the lines between two consecutive elements of an array from a file. My array looks like: problem_arr=(PRS111 PRS213 PRS234) j=0 while } ] do k=`expr $j + 1` sed -n "/${problem_arr}/,/${problem_arr}/p" problemid.txt ---some operation goes... (11 Replies)
Discussion started by: InduInduIndu
11 Replies

2. Programming

Perl: How to read from a file, do regular expression and then replace the found regular expression

Hi all, How am I read a file, find the match regular expression and overwrite to the same files. open DESTINATION_FILE, "<tmptravl.dat" or die "tmptravl.dat"; open NEW_DESTINATION_FILE, ">new_tmptravl.dat" or die "new_tmptravl.dat"; while (<DESTINATION_FILE>) { # print... (1 Reply)
Discussion started by: jessy83
1 Replies

3. Shell Programming and Scripting

help in regular expression

<ATTR name="ABCDEFGH" value=""/> <ATTR name="HJYR" value=""/> what would be the regular expression to match both the above strings... Always end with value=""/> always start with <ATTR name=" the ATTR name can be anything.. I need to use this with match() in awk. Thanks.. (1 Reply)
Discussion started by: shekhar2010us
1 Replies

4. Shell Programming and Scripting

Regular expression

I have a flat tab delimited file of the following format 1 A:23 A:45 A:789 2 A:2 A:47 3 A:78 A:345 A:9 A:10 4 A:34 A:98 I want to modify the file to the following format with insertions of "//" in between 1 A:23 // A:45 // A:789 2 A:2 // A:47 3 A:78 // A:345 // A:9 // A:10 4 A:34... (7 Replies)
Discussion started by: Lucky Ali
7 Replies

5. Shell Programming and Scripting

Regular Expression.

can someone let me know what this means in english. \(abcd\) \ is an escape key right? Thanks Also im getting confused with something like it does this mean any single character? and this would be 2 characters ? Just let me know if im on the right track. (5 Replies)
Discussion started by: syco__
5 Replies

6. Shell Programming and Scripting

Integer expression expected: with regular expression

CA_RELEASE has a value of 6. I need to check if that this is a numeric value. if not error. source $CA_VERSION_DATA if * ] then echo "CA_RELESE $CA_RELEASE is invalid" exit -1 fi + source /etc/ncgl/ca_version_data ++ CA_PRODUCT_ID=samxts ++ CA_RELEASE=6 ++ CA_WEEK_NO=7 ++... (3 Replies)
Discussion started by: ketkee1985
3 Replies

7. Shell Programming and Scripting

regular expression help

Hi, I have a small script which uses egrep and a set of regexes to validate an IP address, however, i want to make it so that if somebody puts a leading space in front of the IP address to be validated it will fail, so this is my script #!/bin/bash #function ip_checker() { result=$( echo... (4 Replies)
Discussion started by: hcclnoodles
4 Replies

8. Shell Programming and Scripting

Regular Expression Help

Hi there, I have a line in a coded text from which the formtat is DEF/AAA/AAA/AAA/AAA/AAA/AAA/AAA/AAA/AAA where A equals a letter but the fields after the DEF/ are optional. Which means the line could look like DEF/AAA or DEF/AAA/AAA etc etc I am trying to a find regular... (8 Replies)
Discussion started by: sickboy
8 Replies

9. Linux

Regular expression to extract "y" from "abc/x.y.z" .... i need regular expression

Regular expression to extract "y" from "abc/x.y.z" (2 Replies)
Discussion started by: rag84dec
2 Replies

10. Shell Programming and Scripting

Regular Expression + Aritmetical Expression

Is it possible to combine a regular expression with a aritmetical expression? For example, taking a 8-numbers caracter sequece and casting each output of a grep, comparing to a constant. THX! (2 Replies)
Discussion started by: Z0mby
2 Replies
Login or Register to Ask a Question