sed internal working


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting sed internal working
# 1  
Old 02-04-2011
sed internal working

Hi Experts
Say I have a huge text file. I want to add a header line to the file. We can get it done in many ways. One is using a temporary file, other way say using 'sed -i' which edits the file in-place. sed is always recommended for better performance. My question is: Internally sed also might be shifting all the lines one line below and inserting a new line at the top. Am I right? If so, how can the performance of sed be faster?

Guru
# 2  
Old 02-04-2011
Code:
# ls -li data
3180921 -rw-r--r-- 1 root root 42 Feb  4 09:33 data
# sed -i 's/2/B/' data
# ls -li data
3180920 -rw-r--r-- 1 root root 42 Feb  4 13:24 data
#

The inode changed. It's a different file with the same name. sed copied the data to a new file to make the change. Then it deleted the old file and renamed the new file.
This User Gave Thanks to Perderabo For This Post:
# 3  
Old 02-04-2011
Hi Perderabo
I understand it now. Say to add a header line to a file, I can write a header to a new file and then copy the contents of the old file. The performance-wise sed should not be much better than using this temporary file method. Then why is sed considered better for performance? Is the performance just in terms of avoinding the avoiding usage of 2 to 3 commands in place of 1 sed command?

Guru
# 4  
Old 02-04-2011
it depends. If you are talking about using sed to manipulate files versus the shell, then sed can be the better one in performance. (speed) because its designed to do that. On the other hand, it also depends on how you use it. For example, chaining different sed commands together might not be efficient than just doing in a single sed invocation.
# 5  
Old 02-05-2011
The most important factor to writing fast shell scripts is to minimize the number of external programs invoked. It is a big deal to create a new process, go find the file containing sed or awk, open it, read it in, transfer control it, wait for it to exit, reclaim the process' resources and deliver the return code to the shell. When I need to manipulate a string I would rather code a dozen internal shell operations that invoke a single copy of sed. This is especially true of string manipulation in a loop.

Once a decision hs been made to invoke an external program, some are faster than others, but this is a relatively minor consideration. sed can tackle fewer jobs than awk. It's a much smaller program than awk. awk always tries to crack a line into fields whether or not this is useful. So sed can outperform awk on the tasks that sed can easily do. tr is smaller still and can outperform sed on the even smaller setset of tasks that tr can handle. But I rarely spend a lot of time worrying about stuff like this. They are all external programs. I try to avoid as many as possible.

Of all of the shell scripts I have posted on this site, the most frequently used is datecalc. And datecalc invokes no external programs at all.
datecalc
# 6  
Old 02-05-2011
I got your point. Thanks Perderabo.

Guru
# 7  
Old 02-05-2011
Code:
echo "header" > newfile
cat file >> newfile

Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Solaris

SSH: internal working but external not working

Hi, This is a strange issue: We have an sftp server. Users can ssh to it from internal LAN without any issue, but they can not ssh to it externally via firewall. Here is what I got: OS is Solaris 9. No hosts.allow and hosts.deny files. Please help. Thank you in advance! (7 Replies)
Discussion started by: aixlover
7 Replies

2. Shell Programming and Scripting

I sed its not working!

sed -i '' 's:'<string>/Users/testuser/Desktop/test.sh</string>':'something':g' log.txt The log file has this in <string>/Users/testuser/Desktop/test.sh</string> and I want to change it to something This code isn't working any ideas? Its doing my head in! (4 Replies)
Discussion started by: digitalviking
4 Replies

3. Shell Programming and Scripting

Sed not working the way i want it

I dont get something about sed If i have a text file inside contain a:a:a:a:a sed "s/"$title:$author:$price:$qtyAvailable:$qtySold"/"$Ntitle:$author:$price:$qtyAvailable:$qtySold"/" This work!! i can change a to be something else but If i have a text file inside contain Tom Tom:La... (2 Replies)
Discussion started by: GQiang
2 Replies

4. Shell Programming and Scripting

sed not working

hello, I am not able to redirect the output to the same file, where I am searching and replacing a pattern. D:\>cat abc.txt abc D:\>sed "s\abc\xyz\g" abc.txt > abc.txt D:\>cat abc.txt D:\> If I dont redirect the output to abc.txt, the command is working fine, even if I append the... (10 Replies)
Discussion started by: chetanpunekar
10 Replies

5. UNIX for Dummies Questions & Answers

sed not working

Hi All, Need some assistance n my script. My file is LBXBC040904071724 and output should be LBX0904071704 tempFile=`echo $file | cut -c 4-7` tempFile1=`echo $file | sed -e s/$tempFile//` min=`expr substr $tempFile1 12 2` cycleno=`expr substr $tempFile 3 2` newFile=`echo $tempFile1 |... (2 Replies)
Discussion started by: jda
2 Replies

6. UNIX for Advanced & Expert Users

Forwarding internal internet packets to internal webserver using iptables

Hi, I need to redirect internal internet requests to a auth client site siting on the gateway. Currently users that are authenticated to access the internet have there mac address listed in the FORWARD chain. All other users need to be redirected to a internal site for authentication. Can... (1 Reply)
Discussion started by: mshindo
1 Replies

7. Shell Programming and Scripting

sed not working for me.

Hi All, I need to modify ifcfg-eth0 file. The file currently contains the following: ONBOOT=no The desired output of the file is: ONBOOT=no DEVICE=eth0 BOOTPROTO=static IPADDR=234.235.34.56 NETMASK=255.255.255.0 GATEWAY=234.235.34.1 I know sed can help me in this, and... (4 Replies)
Discussion started by: nua7
4 Replies

8. UNIX for Dummies Questions & Answers

sed not working

I am working on sed ... to replace a string... but not able to save. i need to repalce a string in httpd.conf in numerous directories. I am doing this find /opt/apache/*/conf/ -name httpd.conf -exec sed 's/LogLevel debug/LogLevel error/g' {} \; even tried with find... (4 Replies)
Discussion started by: logic0
4 Replies

9. UNIX for Dummies Questions & Answers

Sed command not working

Hi, I have a test file as follows: 1G102119 ^ AA1179291 ^ 06oct2006 09:50:35^ 73.4^ 2^ 13^ 0^ 1493 1G102119 ^ AA1179291 ^ 06oct2006 09:49:45^ 73.4^ 2^ 13^ 0^ 1493 1G102119 ^ AA1179291 ^ 06oct2006 09:48:58^ 73.4^ 2^ 17^ 0^ 2 1G102119 ... (9 Replies)
Discussion started by: shashi_kiran_v
9 Replies

10. UNIX for Advanced & Expert Users

sed not working

Hi, Iam doing the following using sed in a script , it is NOT working line_old= 3754|Yes|Yes line_new= 3754|Yes|Yes|Yes|Yes sed -e 's/$line_old/$line_new/' data.$$ > tmp.$$ mv tmp.$$ data.$$ Regards (5 Replies)
Discussion started by: baanprog
5 Replies
Login or Register to Ask a Question