Linux - Newbie This Linux forum is for members that are new to Linux.
Just starting out and have a question?
If it is not in the man pages or the how-to's this is the place! |
Notices |
Welcome to LinuxQuestions.org, a friendly and active Linux Community.
You are currently viewing LQ as a guest. By joining our community you will have the ability to post topics, receive our newsletter, use the advanced search, subscribe to threads and access many other special features. Registration is quick, simple and absolutely free. Join our community today!
Note that registered members see fewer ads, and ContentLink is completely disabled once you log in.
Are you new to LinuxQuestions.org? Visit the following links:
Site Howto |
Site FAQ |
Sitemap |
Register Now
If you have any problems with the registration process or your account login, please contact us. If you need to reset your password, click here.
Having a problem logging in? Please visit this page to clear all LQ-related cookies.
Get a virtual cloud desktop with the Linux distro that you want in less than five minutes with Shells! With over 10 pre-installed distros to choose from, the worry-free installation life is here! Whether you are a digital nomad or just looking for flexibility, Shells can put your Linux machine on the device that you want to use.
Exclusive for LQ members, get up to 45% off per month. Click here for more info.
|
 |
07-19-2012, 05:42 PM
|
#1
|
Member
Registered: May 2010
Location: UK
Distribution: OpenSuse 64 bit
Posts: 45
Rep:
|
add text at the beginning and at the end of lines in a file
Hello all,
I have one text file with about 15 lines of data. I am trying to write a script that would add this <p> at the beginning and at the end of a line, from line 5 to line 15, but ignore first 5 lines of text.
I had a go with the sed command but I just don’t know how to do it, can anyone advice of ways to achieve this please?
Thank you in advance
D.
Last edited by smithy2010; 07-19-2012 at 05:43 PM.
Reason: spelling
|
|
|
07-19-2012, 05:57 PM
|
#2
|
Member
Registered: Sep 2008
Location: The Netherlands
Distribution: Slackware64 current
Posts: 594
Rep: 
|
Code:
ash-4.2$ sed '5,15 s/.*/<p>&<p>/' test
361459 447394 CHL1
290282 290282 CHL1
361459 447394 CHL1
361459 447394 CHL1
<p> 178352861 178363529 AGA<p>
<p> 178352861 178363529 AGA<p>
<p> 178363657 178363657 AGA<p>
<p>361459 447394 CHL1<p>
<p> 290282 290282 CHL1<p>
<p> 361459 447394 CHL1<p>
<p> 361459 447394 CHL1<p>
<p> 178352861 178363529 AGA<p>
<p> 178352861 178363529 AGA<p>
<p> 178363657 178363657 AGA<p>
<p> 178363657 178363657 AGA<p>
|
|
|
07-19-2012, 07:25 PM
|
#3
|
Senior Member
Registered: Dec 2004
Location: Olympia, WA, USA
Distribution: Fedora, (K)Ubuntu
Posts: 4,187
|
For that sot of thing, bash should suffice.
Code:
#!/bin/bash
count=0
while read -r line
do
if [ ${count} -lt 5 ]
then
echo ${line}
else
echo "<p>${line}</p>"
fi
count=$((++count))
done < ${1:-/dev/stdin}
Example:
Code:
$ ls -l | bash smithy2010
total 92
-rw-rw-r-- 1 Peter Peter 28500 Feb 27 14:26 Brews ohare.txt
-rwxrwxr-x 1 Peter Peter 6551 Feb 27 14:26 enum
-rw-rw-r-- 1 Peter Peter 222 Feb 27 14:26 enum.c
-rw-rw-r-- 1 Peter Peter 23947 Feb 27 14:26 output
<p>-rwxrwxr-x 1 Peter Peter 220 Feb 27 14:26 rock1961.gawk</p>
<p>-rw-rw-r-- 1 Peter Peter 57 Feb 27 14:26 rock1961.txt</p>
<p>-rwxr-xr-x 1 Peter Peter 673 Feb 27 14:26 scramble</p>
<p>-rw-rw-r-- 1 Peter Peter 173 Jul 19 16:19 smithy2010</p>
<p>-rwxrwxr-x 1 Peter Peter 1255 Feb 27 14:26 squash</p>
<p>-rw-rw-r-- 1 Peter Peter 1873 Feb 27 14:26 swap</p>
<p>-rw-rw-r-- 1 Peter Peter 1669 Feb 27 14:26 tuxlux.awk</p>
|
|
|
07-19-2012, 09:00 PM
|
#4
|
Member
Registered: Jun 2012
Location: Missouri, USA
Posts: 236
Rep:
|
Using awk
Code:
$ awk '{ if (NR>=5 && NR<=15) print "<p>"$0"</p>"; else print $0}' test
1
2
3
4
<p>5</p>
<p>6</p>
<p>7</p>
<p>8</p>
<p>9</p>
<p>10</p>
<p>11</p>
<p>12</p>
<p>13</p>
<p>14</p>
<p>15</p>
|
|
|
07-19-2012, 10:16 PM
|
#5
|
LQ Guru
Registered: Sep 2009
Location: Perth
Distribution: Arch
Posts: 10,031
|
Alternative sed (although I think the tag at the end needs the slash):
Code:
sed -r 's/^|$/<p>/g' file
Awk can also be shortened:
Code:
awk 'NR>=5 && NR<=15{$0="<p>"$0"</p>"}1' file
|
|
|
07-20-2012, 01:06 PM
|
#6
|
Bash Guru
Registered: Jun 2004
Location: Osaka, Japan
Distribution: Arch + Xfce
Posts: 6,852
|
Similarly, using ed:
Code:
printf '%s\n' '5,15 s/.*/<p>&<p>/' ',p' | ed -s infile
' ,p' prints the altered file to stdout. Change to ' w' to write it back to the original file.
And as grail mentioned, if the end tag is actually " </p>" then you'll have to backslash escape the forward slash.
How to use ed:
http://wiki.bash-hackers.org/howto/edit-ed
http://snap.nlc.dcccd.edu/learn/nlc/ed.html
(also read the info page)
|
|
|
07-22-2012, 05:07 AM
|
#7
|
Member
Registered: May 2010
Location: UK
Distribution: OpenSuse 64 bit
Posts: 45
Original Poster
Rep:
|
Hello all,
Thank you very much for your reply, I found this command to be the most suitable sed -i '5,15 s/.*/<p>&<p>/' file name.
Best wishes
D.
|
|
|
All times are GMT -5. The time now is 12:44 AM.
|
LinuxQuestions.org is looking for people interested in writing
Editorials, Articles, Reviews, and more. If you'd like to contribute
content, let us know.
|
Latest Threads
LQ News
|
|