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.
|
 |
01-19-2010, 08:02 AM
|
#1
|
LQ Newbie
Registered: Jan 2010
Posts: 7
Rep:
|
Sed/awk/grep search for number string of variable length in text file
I need to search a text file for a string of numbers which are different lengths, and always are between number=" and " like:
number="1234567890"
number="22390"
I need to grab those numbers and pipe each one to a line in a file.
I've already tried something with awk and that didn't seem to work.
Thanks in advance.
|
|
|
01-19-2010, 08:16 AM
|
#2
|
LQ Veteran
Registered: Nov 2005
Location: Annapolis, MD
Distribution: Mint
Posts: 17,809
|
If there is only one number per line:
Code:
sed -r 's/.*number=\"([0-9]+)\".*/\1/' filename > newfilename
|
|
|
01-19-2010, 09:13 AM
|
#3
|
LQ Newbie
Registered: Jan 2010
Posts: 7
Original Poster
Rep:
|
Thanks pixellany, but I think I should mention that the file it is reading from will be a dynamic html page and as an unfortunate result the placement of number="$numberstring" will be between all sorts of other tags.
Cheers anyway
|
|
|
01-19-2010, 10:45 AM
|
#4
|
LQ Veteran
Registered: Nov 2005
Location: Annapolis, MD
Distribution: Mint
Posts: 17,809
|
I think my code will work......I said "one number per line"---that does not preclude other junk being on the line.
|
|
|
01-19-2010, 11:12 AM
|
#5
|
LQ Newbie
Registered: Jan 2010
Posts: 7
Original Poster
Rep:
|
I found a way of doing nearly precisely what I wanted. Pretty ugly, but I've no idea what I'm doing generally - I'm pretty new to BASH and coding generally.
grep -o number="....................." filename | tr -d [:alpha:][  unct:] > newfilename
|
|
|
01-19-2010, 11:15 AM
|
#6
|
LQ Veteran
Registered: Nov 2005
Location: Annapolis, MD
Distribution: Mint
Posts: 17,809
|
No more ugly than mine.....
Please use code tags---e.g it will stop thing from being read as smilies---and it preserves formatting.
|
|
|
01-19-2010, 11:24 AM
|
#7
|
Moderator
Registered: Apr 2002
Location: earth
Distribution: slackware by choice, others too :} ... android.
Posts: 23,067
|
Ummm .. that's ugly. Plus it will only work if what's in the
quotes is exactly 22 characters long.Pixellanys solution is
much cleaner & WILL work.
|
|
|
01-19-2010, 11:34 AM
|
#8
|
Member
Registered: Jan 2010
Location: Lancashire
Distribution: Slackware Stable
Posts: 572
Rep: 
|
sed stands for Stream Editor for a reason....
|
|
|
01-19-2010, 12:13 PM
|
#9
|
LQ Guru
Registered: May 2005
Location: boston, usa
Distribution: fedora-35
Posts: 5,330
|
heres my stab at it:
Code:
grep -o number.*" " index.html | awk -F = '{print $2}' > numbers.txt
|
|
|
01-19-2010, 12:20 PM
|
#10
|
LQ Newbie
Registered: Jan 2010
Posts: 7
Original Poster
Rep:
|
Tinkster: It does work if the numberstring is less than 22, which it will be 99% of the time.
You have a point though, and I'm going to try pixellany's again, for cleanliness' sake.
pixellany: sorry about the smiley, I'll remember in future.
Schneidz: I'll give it a go.
Thanks all.
|
|
|
01-19-2010, 01:34 PM
|
#11
|
Moderator
Registered: Apr 2002
Location: earth
Distribution: slackware by choice, others too :} ... android.
Posts: 23,067
|
Quote:
Originally Posted by Alexr
Tinkster: It does work if the numberstring is less than 22, which it will be 99% of the time.
|
That's odd .... what your regex says is:
Code:
Show all consecutive strings that begin with
number=", followed by 22 of anything, followed
by ".
So if your number is shorter than the 22 and it
still shows up you should be very lucky to have
a quote in the 23rd position, otherwise it shouldn't
match the pattern.
And in fact, your code piece doesn't work on the
sample data you provided further up in the thread.
pixellanys does - not sure whether you really want
the bare number or not, but that's what it returns.
Cheers,
Tink
|
|
|
All times are GMT -5. The time now is 09:49 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
|
|