Find and Replace then rename file


 
Thread Tools Search this Thread
Top Forums UNIX for Dummies Questions & Answers Find and Replace then rename file
# 1  
Old 03-24-2011
Find and Replace then rename file

Hi,

This is probably quite simple for an expert, but I keep getting confused about the best approach, grep, awk, sed.

What I have is a range of files numbered 1 to 100. They go

file1.txt
file2.txt

and so on

In each file I need to find and replace a couple of items and rename add a suffix.

Eg file1-new.txt
file2-new.txt

I'd like to be able to run the shell script for example say it's called Renamer.sh in the command line like this Renamer 1

This would grab the file1.txt create file1-new.txt

Renamer 2 would grab the file2.txt create file2-new.txt and so on.

The find and replace I need is to search one large chunk of text that is in xml format so will include characters such as < " and /

Can someone please point me in the right direction?

Thanks,
Travis

Also

---------- Post updated at 12:20 PM ---------- Previous update was at 11:41 AM ----------

PS. I am working in Mac OSX so may not have the full unix commands.
# 2  
Old 03-24-2011
You can use sed -i -e option.

For example.
If you have files file1 and file2.

file1
abc
cfg abc dfd


file2
cfg abc dfd
fjsl
abc

You can replace abc with xyz in both files.
Code:
sed -i -e file*

You will have
file1 (New file2 with all abc replaced with xyz)
file2 (New file2 with all abc replaced with xyz)
file1-e (Your old file1)
file2-e (Your old file2)

Hope this helps. Smilie
# 3  
Old 03-25-2011
Thanks but I don't think this will do what I want.

I need to create a new file with a suffix added to it. In that file some text needs to be replaced.

Not sure your solution does either of these things.

Last edited by chickenhouse; 03-25-2011 at 01:19 AM..
# 4  
Old 03-25-2011
You can move files around as you wish.

Code:
mv file1 file1-suffix; mv file1-e file1;

(Can be done in bulk using awk)
OR
you can use sed to edit files one by one.
You can write a wrapper around it (A loop picks up each file and fire the following command)
Code:
cat filen|sed -i 's/<old pattern>/<new pattern>/g' > filen-suffix

Hope this helps.

---------- Post updated at 11:51 PM ---------- Previous update was at 11:49 PM ----------

You can move files around as you wish.

Code:
mv file1 file1-suffix; mv file1-e file1;

(Can be done in bulk using awk)
OR
you can use sed to edit files one by one.
You can write a wrapper around it (A loop picks up each file and fire the following command)
Code:
cat filen|sed 's/<old pattern>/<new pattern>/g' > filen-suffix

Hope this helps.
# 5  
Old 03-25-2011
Try this.
Code:
#!/bin/ksh
for i in {1..100}
do
        sed 's/<pattern to search>/<pattern to replace>/g' file$i.txt > temp
        mv temp file$i-new.txt
done

# 6  
Old 03-25-2011
My Solution

Hi guys,

Thanks for your help.

Here's my solution, which is not very elegant. I've run the sed 4 times. The reason I've done it this way is I can avoid any problems with odd xml characters such as < /. Also the problem where I want change 256 to 512 then 128 to 256 I think needs to be done in a specific order. I saved this below in a file called Replacer.sh.

Code:
#!/bin/sh

cat filename$1.tmx|sed 's/"32"/"64"/g' > filename$1-suffix.tmx
cat filename$1-suffix.tmx|sed 's/"256"/"512"/g' > filename$1-suffix.tmx
cat filename$1-suffix.tmx|sed 's/"128"/"256"/g' > filename$1-suffix.tmx
cat filename$1-suffix.tmx|sed 's/imageName.png/imageName-suffix.png/g' > filename$1-suffix.tmx

Then to run it I call
Code:
sh Replacer.sh 1

and
Code:
sh Replacer.sh 2

etc.

I know I can run it all as a loop but at the moment I want to run it on one file at a time and test that file in my other program.

The only other issue is I don't think I can overwrite the suffix file if it already exists. No doubt there is a command to overwrite, but i couldn't find it.

You might have guessed from the .tmx these are tilemaps that need a low res and high res version.

Last edited by chickenhouse; 03-25-2011 at 03:19 AM..
 
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. UNIX for Beginners Questions & Answers

Need to find and replace in a file

Hi All, I am having below sample data in a file. I need to find all the line form this file with word ABC and i need to replace the characters at position 120 which is "CO:BOGFDUI"(30chars) in the lines with blank space. I have tried using grep to find the word with ABC (grep ABC filename),... (3 Replies)
Discussion started by: abhi_123
3 Replies

2. UNIX for Dummies Questions & Answers

Find and rename file recursively

Hi, I have a directory which contains multiple files with .txt extension, i want to rename all these file to .bak extension using find command, this is what i've tried, please help me to correct this : find /home/application/test -name '*.txt' -exec rename 's/txt/bak/' {} \; seems to... (8 Replies)
Discussion started by: mukulverma2408
8 Replies

3. Shell Programming and Scripting

Perl script to read string from file#1 and find/replace in file#2

Hello Forum. I have a file called abc.sed with the following commands; s/1/one/g s/2/two/g ... I also have a second file called abc.dat and would like to substitute all occurrences of "1 with one", "2 with two", etc and create a new file called abc_new.dat sed -f abc.sed abc.dat >... (10 Replies)
Discussion started by: pchang
10 Replies

4. UNIX for Dummies Questions & Answers

sed replace to rename each line a file

Have a file in this format This is line one ; line_one This is line two ; line_two This is line three ; line_three This is line four ; line four. I'm trying to make each line a new file called line_one line_two line_three line_four. Tried using split -1 but then I'm back needing to rename... (3 Replies)
Discussion started by: jimmyf
3 Replies

5. Shell Programming and Scripting

Find and rename part of a file

hi, Need your help. I need to write a script for below.. i have two files in directory /home/abc as below: Watch_20140203_abc.dat Watchnow_20140203_abc.dat I have to copy this file from /home/abc to /home01/home02 after that i have to rename the date part in above two files... (1 Reply)
Discussion started by: Vivekit82
1 Replies

6. Shell Programming and Scripting

How to find and rename of particular pattern in file.?

Hi Guys, I have folder called /input/temp. Inside the folder I have lot of files. I need to find the file of pattern Article_????_test_?????????.txt and replace by format below. Article_????_?????????.txt Below is the one which I tried but it doesn't works can you please help us.... (4 Replies)
Discussion started by: Vinoth Kumar G
4 Replies

7. Shell Programming and Scripting

Problem with Find and rename file

I want to find a file say IIFT and check its size is zero or not. If its zero then I have to rename anothe file say WWFT , which is in another folder to WWFT$Todaysdate. I tried below command: cd dir2 (*File WWFT is in dir2) find dir/ -type f -name 'IIFT*' -size 0 -exec mv WWFT... (3 Replies)
Discussion started by: ammbhhar
3 Replies

8. Shell Programming and Scripting

Find and Rename File using Terminal

I need help finding a file through terminal and then renaming it automatically. Here is what I have so far to find the file: cd /User/Applications find . */SourceM.app/banner.png | while read line; do mv "$line" banner-.png; done I want the script to rename the file "banner.png" to... (6 Replies)
Discussion started by: rbisconti97
6 Replies

9. 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

10. UNIX for Dummies Questions & Answers

Find replace within a file?

I build several files by using the cut command to grab select fields(columns) from a really bid csv file. Each file is one column of data. I then put them together using paste command. Here is the code built in tcsh: cut -d , -f 1 some.csv > 1.csv cut -d , -f 10 some.csv > 10.csv paste 1.csv... (2 Replies)
Discussion started by: yankee428
2 Replies
Login or Register to Ask a Question