Change the content of files but not change the date


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Change the content of files but not change the date
# 1  
Old 12-17-2012
Change the content of files but not change the date

I have 100 files in a directory , all the files have a word "error" and they are created in different date . Now I would like to change the word from "error" to "warning" , and keep the date of the files ( that means do not change the file creation date after change the word ) , can advise what can I do ?

thanks.
# 2  
Old 12-17-2012
One option is to use touch to create a temporary file with the same timestamp as the original file, then use that to re-touch the original file once you have made your change.

Code:
$ touch -r file1 file1.tmp
$ ll file1*
-rw-r--r--  1 scott  staff   35 27 Nov 07:45 file1
-rw-r--r--  1 scott  staff    0 27 Nov 07:45 file1.tmp
$ vi file1
$ ll file1*
-rw-r--r--  1 scott  staff   36 17 Dec 18:50 file1
-rw-r--r--  1 scott  staff    0 27 Nov 07:45 file1.tmp
$ touch -r file1.tmp file1
$ ll file1*
-rw-r--r--  1 scott  staff   36 27 Nov 07:45 file1
-rw-r--r--  1 scott  staff    0 27 Nov 07:45 file1.tmp

# 3  
Old 12-17-2012
Quote:
Originally Posted by Scott
One option is to use touch to create a temporary file with the same timestamp as the original file, then use that to re-touch the original file once you have made your change.

Code:
$ touch -r file1 file1.tmp
$ ll file1*
-rw-r--r--  1 scott  staff   35 27 Nov 07:45 file1
-rw-r--r--  1 scott  staff    0 27 Nov 07:45 file1.tmp
$ vi file1
$ ll file1*
-rw-r--r--  1 scott  staff   36 17 Dec 18:50 file1
-rw-r--r--  1 scott  staff    0 27 Nov 07:45 file1.tmp
$ touch -r file1.tmp file1
$ ll file1*
-rw-r--r--  1 scott  staff   36 27 Nov 07:45 file1
-rw-r--r--  1 scott  staff    0 27 Nov 07:45 file1.tmp

thanks reply ,

can I do it in a batch , rather than do it for each file ?

Thanks .
# 4  
Old 12-17-2012
Code:
for file in *.txt  # replace the extension as per your requirement.
do
        if [ $( grep -c error $file ) -ne 0 ]
        then
                TMPFILE=$( mktemp )
                touch -r $file $TMPFILE
                sed 's/error/warning/g' $file > tmp; mv tmp $file
                touch -r $TMPFILE $file
                rm -f $TMPFILE
        fi
done

# 5  
Old 12-17-2012
thx reply ,

it works , but if I want to change the word is a string ( eg. please check the error ) rather than a single word , therefore what I want to do is change "please check the error" to "please check the the warning" , what can I do ?

thanks
# 6  
Old 12-17-2012
Try this:

Code:
FROM="please check the error"
TO="please check the the warning"
 
for file in *.txt  # replace the extension as per your requirement.
do
        if grep -q "$FROM" "$file"
        then
                sed "s/$FROM/$TO/g" "$file" > tmp
                touch -r "$file" tmp
                mv tmp "$file"
        fi
done


Last edited by Chubler_XL; 12-17-2012 at 07:40 PM.. Reason: Fixed typos
# 7  
Old 12-17-2012
when run the script , it pops the error

line 8: tmp: Is a directory
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Script to change the file content using some conditions

Hello, I would like to change the content of the file that has few blocks starts with 10 and ends with ";" File1.txt 10 bonuses D 20 MATCHED 30 UPD COL 40 (SOL=30) 20 NOT MATCHED 30 INS COL 40 (SOL=30) ; 10 bonuses D 20 MATCHED 30 UPD COL 40... (5 Replies)
Discussion started by: Mannu2525
5 Replies

2. Shell Programming and Scripting

Change date format in am/pm in csv files using UNIX

Hi All, I'm new to forum good to hear all. I stuck in converting date format in csv file using unix csv file contains as below ,750,0000000000000000GCJR, ,06/22/2016 14:48:44 I want to convert into as below ,750,0000000000000000GCJR, ,06/22/2016 02:48:44 PM Please reply asap..... (22 Replies)
Discussion started by: Raghureds
22 Replies

3. Shell Programming and Scripting

Change the content of files but not change the date

I have 100 files in a directory , all the files have a word "error" and they are created in different date . Now I would like to change the word from "error" to "warning" , and keep the date of the files ( that means do not change the file creation date after change the word ) , can advise what can... (0 Replies)
Discussion started by: ust3
0 Replies

4. Linux

when SCP, does file content change?

Good day to you all, Just want to check here, i know when scping a file, size might change due to space issue. it might sound silly, but does file content get change too? if so, what kind of situation that might be? (1 Reply)
Discussion started by: ahtat99
1 Replies

5. Shell Programming and Scripting

Change file content based on data

I have a Transaction File coming into the system. In this file, in all records the relevant data is as follows- Position 1:10 -> Transaction Code Position 252:255 -> 4 digit business code Now based on these 2 fields I have to alter value in Transaction code (Position 1:10)... (6 Replies)
Discussion started by: varunrbs
6 Replies

6. UNIX for Advanced & Expert Users

To change the colour of the content in email sent through unix

Hi I want to change the color of the email content sent through unix. I tried a lot and left in vain. I heard that it could be done by sending the email as HTML. But I don't how to do it. Can you all share your ideas? ~sakthifire (1 Reply)
Discussion started by: sakthifire
1 Replies

7. Shell Programming and Scripting

How to change a file's content by row?

Greetings. So the question is basically the same as it's in the title. I'd like to write a program that changes a file by rows. So to clarify it. (i know i shouldn't use code,/code here but i would like to separate it) So for example a text file looks like something like this: Happy... (5 Replies)
Discussion started by: buddhist
5 Replies

8. Shell Programming and Scripting

change field content awk

I have a line like this: I want to move HTTP/1.1 200 OK to the next line and put a blank line between the two lines i.e. How can i get it using awk? Thanks in advance (2 Replies)
Discussion started by: littleboyblu
2 Replies

9. Shell Programming and Scripting

how to change the content thru sed.....

Hi Everybody, Another headache form myside, i have a file name noname.txt having content as CS007=NEW and i have to write a scipt which will take the parameters as update,delete... with the 1st field of noname.txt (i.e. here CS007) whose objective is to change the 2nd field of noname.txt... (3 Replies)
Discussion started by: manas_ranjan
3 Replies

10. Shell Programming and Scripting

Mass Change content in all files

Hi, Are there any sample scripts to change content like file paths, profile paths etc., from test version to production , instead of changing one by one, i would like to pass the in file (prod version/Test version) to convert to test or prod verions. any help is appreciated!! ~R (1 Reply)
Discussion started by: terala
1 Replies
Login or Register to Ask a Question