best method of replacing multiple strings in multiple files - sed or awk? most simple preferred :)


 
Thread Tools Search this Thread
Top Forums UNIX for Dummies Questions & Answers best method of replacing multiple strings in multiple files - sed or awk? most simple preferred :)
# 8  
Old 08-26-2010
Hi.

Your problem is here:

Code:
for f in $(ls -1)do

Should be:

Code:
for f in $(ls -1); do

or:
Code:
for f in $(ls -1)
do

But it's not much use if the filenames contain spaces.

Code:
function Replace
{
  ls | while read f; do
    sed -i 's/JAM/BUTTER/g;s/BREAD/CRACKER/g;s/SCOOP/FORK/g;s/SPREAD/SPLAT/g' "$f"
  done
}

# 9  
Old 08-26-2010
Code:
function Replace
{
  ls | while read f; do
    sed -i 's/JAM/BUTTER/g;s/BREAD/CRACKER/g;s/SCOOP/FORK/g;s/SPREAD/SPLAT/g' "$f"
  done
}

cheers for the help

ran the code above and it throws:

sed: illegal option -- i

there is just one file in the dir called 'test.log'? no spaces in the file name?

How would you get round the problem of having spaces in the filenames? assuming you wanted to run it against files with spaces in the name?
# 10  
Old 08-26-2010
Hi.

Then you can either use ed, or write to a temporary file:

Code:
function Replace
{
  ls | while read f; do
    sed 's/JAM/BUTTER/g;s/BREAD/CRACKER/g;s/SCOOP/FORK/g;s/SPREAD/SPLAT/g' "$f" > "$f".tmp && cp -f "$f".tmp "$f" && rm "$f".tmp
  done
}

To handle filenames with spaces, don't use a for-loop. Go with the while-loop.

Last edited by Scott; 08-26-2010 at 12:19 PM.. Reason: Removed wrong file
This User Gave Thanks to Scott For This Post:
# 11  
Old 08-26-2010
amazing! works lovely - it removes the original text file and instead just leaves:

test.log.tmp

in the dir - is is meant to do that?

I love Unix Smilie

it seems to remove the string 'SPREAD' completely? i.e.

orginal:

1 JAM
2 BREAD
3 SCOOP
4 SPREAD

open file after running sed:

1 BUTTER
2 CRACKER
3 FORK
4

I.e. SPLAT is missing from line 4?

Last edited by rich@ardz; 08-26-2010 at 12:19 PM.. Reason: additional info
# 12  
Old 08-26-2010
Quote:
Originally Posted by rich@ardz
amazing! works lovely - it removes the original text file and instead just leaves:

test.log.tmp

in the dir - is is meant to do that?

I love Unix Smilie
Um, no!

Sorry my mistake. I've updated my previous post Smilie
This User Gave Thanks to Scott For This Post:
# 13  
Old 08-26-2010
Looking good Smilie the sed seems to completely remove the final line of the txt file however?
# 14  
Old 08-26-2010
Quote:
Originally Posted by rich@ardz
Looking good Smilie the sed seems to completely remove the final line of the txt file however?
Hi.

I looked at that, and it seems to work for me.

Code:
$ cat file1
1 JAM
2 BREAD
3 SCOOP
4 SPREAD

$ sed 's/JAM/BUTTER/g;s/BREAD/CRACKER/g;s/SCOOP/FORK/g;s/SPREAD/SPLAT/g' file1
1 BUTTER
2 CRACKER
3 FORK
4 SPLAT

My first thought was a missing newline on the last line, but I simulated that and it still worked.

Does this show one fewer line than is in your file?:
Code:
wc -l filename

 
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. UNIX for Beginners Questions & Answers

Issue with search and replacing multiple items in multiple files

Im having an issue when trying to replace the first column with a new set of values in multiple files. The results from the following code only replaces the files with the last set of values in val.txt. I want to replace all the files with all the values. for date in {1..31} do for val in... (1 Reply)
Discussion started by: ncwxpanther
1 Replies

2. Shell Programming and Scripting

sed parser behaving strange on replacing multiple words in multiple files

I have 4000 files like $cat clus_grp_seq10_g.phy 18 1002 anig_OJJ65951_1 ATGGTTTCGCAGCGTGATAGAGAATTGTTTAGGGATGATATTCGCTCGCGAGGAACGAAGCTCAATGCTGCCGAGCGCGAGAGTCTGCTAAGGCCATATCTGCCAGATCCGTCTGACCTTCCACGCAGGCCACTTCAGCGGCGCAAGAAGGTTCCTCG aver_OOF92921_1 ... (1 Reply)
Discussion started by: sammy777888
1 Replies

3. Shell Programming and Scripting

Grep strings on multiple files and output to multiple files

Hi All, I want to use egrep on multiple files and the results should be output to multiple files. I am using the below code in my shell script(working in Ksh shell). However with this code I am not attaining the desired results. #!/bin/ksh ( a="/path/file1" b="path/file2" for file in... (4 Replies)
Discussion started by: am24
4 Replies

4. Shell Programming and Scripting

Replacing matched patterns in multiple files with awk

Hello all, I have since given up trying to figure this out and used sed instead, but I am trying to understand awk and was wondering how someone might do this in awk. I am trying to match on the first field of a specific file with the first field on multiple files, and append the second field... (2 Replies)
Discussion started by: karlmalowned
2 Replies

5. Shell Programming and Scripting

Grep multiple strings in multiple files

Hi, every one! I have a file with multiple strings. file1 ATQRGNE ASQGVKFTE ASSQYRDRGGLET SPEQGARSDE ASSRDFTDT ASSYSGGYE ASSYTRLWNTGE ASQGHNTD PSLGGGNQPQH SLDRDSYNEQF I want to grep each string in hundreds of files in the same directory, further, I want to find out the string... (7 Replies)
Discussion started by: xshang
7 Replies

6. Shell Programming and Scripting

Search & Replace: Multiple Strings / Multiple Files

I have a list of files all over a file system e.g. /home/1/foo/bar.x /www/sites/moose/foo.txtI'm looking for strings in these files and want to replace each occurrence with a replacement string, e.g. if I find: '#@!^\&@ in any of the files I want to replace it with: 655#@11, etc. There... (2 Replies)
Discussion started by: spacegoose
2 Replies

7. Shell Programming and Scripting

Print lines between two strings multiple occurencies (with sed, awk, or grep)

Hello, I can extract lines in a file, between two strings but only one time. If there are multiple occurencies, my command show only one block. Example, monfichier.txt contains : debut_sect texte L1 texte L2 texte L3 texte L4 fin_sect donnees inutiles 1 donnees inutiles 2 ... (8 Replies)
Discussion started by: theclem35
8 Replies

8. Shell Programming and Scripting

Sed or Awk for lines between two strings multiple times and keep the last one

Hi, I am trying to get lines between the last occurrences of two patterns. I have files that have several occurrences of “Standard” and “Visual”. I will like to get the lines between “Standard” and “Visual” but I only want to retain only the last one e.g. Standard Some words Some words Some... (4 Replies)
Discussion started by: damanidada
4 Replies

9. UNIX for Dummies Questions & Answers

Grep multiple strings in multiple files using single command

Hi, I will use below command for grep single string ("osuser" is search string) ex: find . -type f | xarg grep -il osuser but i have one more string "v$session" here i want to grep in which file these two strings are present. any help is appreciated, Thanks in advance. Gagan (2 Replies)
Discussion started by: gagan4599
2 Replies

10. Shell Programming and Scripting

Replacing text from multiple files at multiple location

Hi, I have many files scattered in all different folders. I want to replace the text within all the files using a single command ( awk, sed...) Is it possible? example find all the files in which there is text "memory" and replace it with "branded_memories". the files can be at the... (2 Replies)
Discussion started by: rudoraj
2 Replies
Login or Register to Ask a Question