General :: Terminal - Using Regular Expressions With Grep
Aug 3, 2011
I can't get this simple regular expression to work for matching emails: 'w*(?:.w*)*@w*(?:.w*)*w{2,5}'
It should be working as I have tested it with regex pal and it works just fine. I think there's a problem with optional character class but I'm not sure.
I'm writing a program that works with text files, and I'm trying to create some filters with grep. I have various questions here, so I'll number them for clarity.
1) First of all, I'd like to know what wc -w is actually returning. The word count is less than what gedit is counting in Document Statistics, so obviously gedit is counting something (like newlines) that wc -w is not
2) Secondly, I was wondering if there was a way to grep x number of words. I'm looking for something like the -m option, but returning a certain number of words instead of lines. For example, to find the first 2000 words, do something like grep -someoption 2000 ".*" or using {1,2000}.
3) Finally, I'm trying to filter out headers and footers of a text file but having no luck. The text files are Project Gutenberg files, so they have standardized headers and footers. Here's an example: [URL]...
The header starts with "The Project Gutenberg EBook of" and ends with the line containing "START OF THIS PROJECT GUTENBERG EBOOK" The footers begin with: "End of the Project Gutenberg EBook of" My problem is, grep can find:
I am pretty new at this topic but I would like to learn it from example. The first thing I am working on is to modify the command date to be shown as DD/MM/YY only using regular expression but I dont know how to combine what there is in the regexp tutorials online and the syntax for batch scripting. Any help?
Here is what I what. run a file test: ~# ./test Where file test is: #!/bin/bash # DATE=$( date )
[Code]..
Also if you can point me to good regexp tutorials (directed towards batch scripting), that will be great.
Lets say I have 20 files named FOOXX, where XX is the number of the file, eg 01, 02 etc. At the moment, if I want to delete all files lower than the number 10, this is easy and I just use a wildcard, eg rm FOO0* However, if I want to delete specific files ina range, eg 13-15, this becomes more difficult. rm FPP[13-15] does not work, and asks me if I wish to delete all files. Likewse rm FOO1[3-5] wishes to delete all files that begin with FOO1 So, what is the best way to delete ranges of files like this? I have tried with both bash and zsh, and I don't think they differ so much for such a basic task?
I've began to develop with C++ (Eclipse+Qt) and the first problem I see is that there is not good functions for manipulating strings. if there is a library for manipulating strings with regular expressions?
i am trying to create an exclude regular expression for my build.xml. The problem is, that i am trying to find some info on which REs are acceptable/valid for ant... Is ant using standard regular expressions? POSIX ones? Since it is a java-based tool, the "Java REs" are probably valid. I am a little bit confused. If somebody can help me out with the different RE standards, i would be most obliged.
Code: find /Data/ -type f -iname "*7pm*" But this doesn't: Code: find /Data/ -type f -regex *7[Pp][Mm]*
I've tried MANY variations, but I'm getting no error messages, just no returns, and yet the first find, will find the sorts of files I'm looking for. I realise a win is a win, but I'm of the understanding that the -regex switch allows for some really complex use of regular expressions - but I can't even get a very simple one to work,
On my server, logs are saved in log.gz format. I want to know what regular expression should i use to search both oracle and a particular IP, say 1.2.3.4 in a single log line ?
how to use grep with an expression that is constantly changing... basically this is what I am trying to do:
Code: watch "mpstat -P ALL | grep -e '`date +%r`'" which, should show me my CPU usage updated every couple seconds. The grep is being used to omit lines that aren't needed (all the useful lines start with the current time.) Problem is, it seems to execute the 'date +%r' command once.
I would like grep to execute the date command every time the watch command updates.
EDIT: I've found a workaround by putting the
Code: mpstat -P ALL | grep -e "`date +%r`" All in a shell file (that I called cpustat.sh), and then executing watch ./cpustat.sh
Would still like to know if there is an actual solution without having to create a seperate file (and preferably in one line). I have tried using a function to do the mpstat and grep part, but apparently watch doesn't play nice with functions
Is it possible to point to a two-digit interval with regular expressions?
Background: I'm using mplayer to watch tv shows, that often have episode numbers in their names. I know how to easily add several files to the playlist by using brackets, by typing something like $ mplayer tv/South.Park.S1.E0[1-5]*avi
Is there a way to point to files 06-13 in a single expression?
I just want to grep for a n digit number followed by M alphabet. Generally for a three digit number i can give grep [0-9][0-9][0-9]M , but if the digits are increasing it is tough to represent them.
Here's my need: If Calendar Day= Then FCPeriod= And FCYear= Jan 11 to Feb 1002Current Year of Feb 10 Feb 11 to Mar 1003Current Year of Mar 10 Mar 11 to Apr 1004Current Year of Apr 10 Apr 11 to May 1005Current Year of May 10 May 11 to June 1006Current Year of June 10 June 11 to July 1007Current Year of July 10 July 11 to Aug 1008Current Year of Aug 10 Aug 11 to Sept 1009Current Year of Sept 10 Sept 11 to Oct 1010Current Year of Oct 10 Oct 11 to Nov 1011Current Year of Nov 10 Nov 11 to Dec 1012Current Year of Dec 10 Dec 11 to Jan 1001* Current Year of Jan 10
* Note for Dec 11 - Dec 31, The Next Year to be used IE: Current date is Dec 28th, 2010. Year = 2011 IE: Current date is Jan 8th, 2011, Year = 2011. Looks like I'll need a case statement with some regular expressions...
What I am doing is reading the text from a text document and storing all of the text inside of a ArrayList. I then set one of the values of the Arraylist as a string. I want to use regular expressions find out what the first two characters of the String are. if first two characters = "//" then function(); I only care about the first two characters though. If you need any more information, just ask.
I'm trying to math all class references in a C++ file using grep with regular expression. I'm trying to know if a specific include is usuless or not, so I have to know if there is a refence in cpp. I wrote this RE that searches for a reference from class ABCZ, but unfortunately it isn't working as I espected:
^[^(/*)(//)] don't math comments in the begging of the line ( // or /* ) .* followed by any character [^a-zA-Z] do not accept any caracter before the one I'm searching (like defABCZ) []* any white space (I can have something like ABCZ var; ) [*(<:;,{& ] followed by ( * < : ; , & { (I cant get #define "ABCZ.h" or ABCZdef for example)
Well, I can get patterns like this:
class Test: public ABCZ{ class Test: public ABCZ { class Test : public ABCZ<T>
How would I use a unix grep regular expression to find any two capital letters side by side and how would I find an expected comma in an expected spot?
i am running slackware and i cant set my terminal to regular shell. when i open up a terminal i see something like bash4.1 instead of hostname and nickname how can i change this. i use more than one terminal so id liek to make this change for all terminals
I'm trying to math all class references in a C++ file using grep with regular expression. I'm trying to know if a specific include is usuless or not, so I have to know if there is a refence in cpp. I wrote this RE that searches for a reference from class ABCZ, but unfortunately it isn't working as I espected:
grep -E '^[^(/*)(//)].*[^a-zA-Z]ABCZ[]*[*(<:;,{& ]' ^[^(/*)(//)] don't math comments in the begging of the line ( // or /* ) .* followed by any character
[code]....
Well, I can get patterns like this:
class Test: public ABCZ{ class Test: public ABCZ { class Test : public ABCZ<T>
After typing "grep some_word" on terminal 6, the system doesn't do a thing, just lets me type endlessly. I've tried "Esc", "q" , [CTRL] + x, "exit" and no luck. I bet I'll kick my ass when you tell me but at the moment I can't figure it out. Rebooting would probably solve the problem but there must be a better way.
I could've sworn this website used to have a games section, but I guess I'll just post this here. Is there any way to play Nethack in the regular terminal? I've tried the normal install, but it says that xterm is an unknown terminal type. I don't really want to play in xterm anyway; I like the regular terminal much better.
Is there any way to get information about whether something is currently played via the speakers? Is there an app that "scans" the VU-meter (e.g. pavumeter) in a terminal and prints out any information about the current "sound-volume" that goes out?I'd like to create a script that prevents my Ubuntu to suspend while something (e.g. music) is played... I know that e.g. Rhythmbox has a plugin for that, but I'd like to use SongBird...
I am trying to learn more about global expressions and how it is needed in changing stuff in vi and in shell scipting in general.My question is basic:
How can I add a " # " pound sign at the beginning of every line in a file. So if I want to remark out every line in a file, what would be the global expression for that? Is there a global expression cheat sheet?