Operating System - Linux
1748177 Members
4178 Online
108758 Solutions
New Discussion юеВ

Re: data manipulation in the file

 
SOLVED
Go to solution
Reen
Advisor

data manipulation in the file

How can i replace data in a file without opening it?
I want the 5th,6th and 7th character in a file to be replaced by a string
Can anybody help me??
20 REPLIES 20
Peter Godron
Honored Contributor

Re: data manipulation in the file

Hi,
and welcome to the forums !
What do you mean by "without opening" ?
In order to read the data you have to open the file!

You can read this earlier thread with a similar problem:
http://forums1.itrc.hp.com/service/forums/questionanswer.do?threadId=1107862

Please also read:
http://forums1.itrc.hp.com/service/forums/helptips.do?#33 on how to reward any useful answers given to your questions.
Reen
Advisor

Re: data manipulation in the file

Hi Peter,
Thank u so much for the welcum
and bout the query..
the link dint help.
here i dont know wat these 5th, 6th and 7th characters are, i just want them replaced

and what i meant by saying without opening the file is that, if u open a file in any editor, its not a prob to replace a character
Peter Godron
Honored Contributor

Re: data manipulation in the file

Hi,
if you want to change 5-7 char of each line:
perl -ple 'substr($_,4,3,"abc")' g.lis > h.lis

Example:
input (g.lis)
12399456
12398456
output (h.lis)
1239abc6
1239abc6
Peter Godron
Honored Contributor

Re: data manipulation in the file

Hi,
or if you only want this to happen on the first line of the file:

perl -ple 'substr($_,4,3,"abc") if $.==1' g.lis > h.lis
Reen
Advisor

Re: data manipulation in the file

Peter,
am really sorry.. i forgot to say i need the solution in shell scripting terms..
since i dont understand perl.
pls
Peter Godron
Honored Contributor

Re: data manipulation in the file

Hi,
in that case the whole things gets a bit more complex. Can you please provide an example line of input, as we need to know if the data is split into fields etc.

Dennis Handly
Acclaimed Contributor
Solution

Re: data manipulation in the file

If you want to replace columns 5-7 of every line, you can use sed:
$ sed -e 's/^\(....\).../\1ABC/' file

Where ABC is your replacement string. It can be longer or shorter. "\1" puts back the first 4 chars.
Peter Godron
Honored Contributor

Re: data manipulation in the file

Hi,
if sed is ok by you, could you please complete the thread by awarding points to helpful answers and summarising the solution for you. Otherwise please continue the thread.

http://forums1.itrc.hp.com/service/forums/helptips.do?#33 shows how to reward any useful answers given to your questions.
Ralph Grothe
Honored Contributor

Re: data manipulation in the file

I don't think that you can modify data in a file without opening it (even read only, and dumping a modified copy of its content).
When you use those shell redirections, as shown, the shell is doing the opening (and possibly clobbering) for you by system calls behind the scenes.
You could verify by attaching a syscall tracer like tusc, truss, or strace to your processes...
Madness, thy name is system administration