Using GNU Regex


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Using GNU Regex
# 1  
Old 08-07-2016
Using GNU Regex

I'm just learning Regex and while testing my understanding I received some unexpected results.

I created example.txt with the text "abcddd". Running the command
Code:
grep --color '[^abc]d' example.txt

I received the results:
Code:
"abcddd"

with the first and second letter d highlighted in red.


So based on this return my statement meant- search the file example.txt for a string where the first character is not a,b, or c that is followed by the character d and highlight the found characters.

What is confusing is that in my LPIC guide the character ^ represents the start of line. In practice it seems to represent "exclude the following characters". Is there a difference in using it inside the brackets vs. outside brackets?

---------- Post updated at 01:44 PM ---------- Previous update was at 01:25 PM ----------

Apologize I actually found the answer in after reading more carefully.

The use of carat "^a" specifies that the line start with the character "a".

Last edited by vbe; 08-07-2016 at 05:28 PM..
# 2  
Old 08-07-2016
Quote:
Originally Posted by rthomas529
I'm just learning Regex and while testing my understanding I received some unexpected results.

I created example.txt with the text "abcddd". Running the command
Code:
grep --color '[^abc]d' example.txt

I received the results:
Code:
"abcddd"

with the first and second letter d highlighted in red.


So based on this return my statement meant- search the file example.txt for a string where the first character is not a,b, or c that is followed by the character d and highlight the found characters.

What is confusing is that in my LPIC guide the character ^ represents the start of line. In practice it seems to represent "exclude the following characters". Is there a difference in using it inside the brackets vs. outside brackets?

---------- Post updated at 01:44 PM ---------- Previous update was at 01:25 PM ----------

Apologize I actually found the answer in after reading more carefully.

The use of carat "^a" specifies that the line start with the character "a".
The use of ^a is context sensitive. If ^a appears at the start of an RE, it matches a input whose first character is a, but if ^ is the first character in a bracket expression (such as [^abc], it makes the bracket expression a non-matching bracket expression (in this case matching any single character that is not a, not b, and not c). So, in your original command, the first place in the string abcddd that matched the BRE [^abc]d was the dd after the c. In this case the first d is a character that was not a, b, or c and the second d matches the d in the BRE after the non-matching bracket expression. To get what you originally requested, I assume that you came up with something like:
Code:
grep --color '^[^abc]d' example.txt

where the first circumflex in the BRE is an anchor and the 2nd circumflex identifies the bracket expression as a non-matching bracket expression.
Login or Register to Ask a Question

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Sendmail K command regex: adding exclusion/negative lookahead to regex -a@MATCH

I'm trying to get some exclusions into our sendmail regular expression for the K command. The following configuration & regex works: LOCAL_CONFIG # Kcheckaddress regex -a@MATCH +<@+?\.++?\.(us|info|to|br|bid|cn|ru) LOCAL_RULESETS SLocal_check_mail # check address against various regex... (0 Replies)
Discussion started by: RobbieTheK
0 Replies

2. Shell Programming and Scripting

Perl, RegEx - Help me to understand the regex!

I am not a big expert in regex and have just little understanding of that language. Could you help me to understand the regular Perl expression: ^(?!if\b|else\b|while\b|)(?:+?\s+){1,6}(+\s*)\(*\) *?(?:^*;?+){0,10}\{ ------ This is regex to select functions from a C/C++ source and defined in... (2 Replies)
Discussion started by: alex_5161
2 Replies

3. Shell Programming and Scripting

Help with REGEX??

i have a file 1.txt. the file contains: * server1.com : ewf,wefwef,wef,wef ------------------------------------- * server2.com : ewf,wefwef,wef,wef ------------------------------------- * server3.com : ewf,wefwef,wef,wef ------------------------------------- how can i read * ? from the... (2 Replies)
Discussion started by: zigizag
2 Replies

4. UNIX for Dummies Questions & Answers

read regex from ID file, print regex and line below from source file

I have a file of protein sequences with headers (my source file). Based on a list of IDs (which are included in some of the headers), I'd like to print out only the specified sequences, with only the ID as header. In other words, I'd like to search source.txt for the terms in IDs.txt, and print... (3 Replies)
Discussion started by: pathunkathunk
3 Replies

5. UNIX for Advanced & Expert Users

Vi Regex help

Can someone tell me what is going with this expression :%s/<C-V><C-M>/. Is there a way to get a more useful message if the carriage return has been deleted? http://objectmix.com/editors/149245-fixing-dos-line-endings-within-vim.html#post516826 Why does this expression work for... (1 Reply)
Discussion started by: cokedude
1 Replies

6. Shell Programming and Scripting

Converting perl regex to sed regex

I am having trouble parsing rpm filenames in a shell script.. I found a snippet of perl code that will perform the task but I really don't have time to rewrite the entire script in perl. I cannot for the life of me convert this code into something sed-friendly: if ($rpm =~ /(*)-(*)-(*)\.(.*)/)... (1 Reply)
Discussion started by: suntzu
1 Replies

7. UNIX for Dummies Questions & Answers

| help | unix | grep (GNU grep) 2.5.1 | advanced regex syntax

Hello, I'm working on unix with grep (GNU grep) 2.5.1. I'm going through some of the newer regex syntax using Regular Expression Reference - Advanced Syntax a guide. ls -aLl /bin | grep "\(x\)" Which works, just highlights 'x' where ever, when ever. I'm trying to to get (?:) to work but... (4 Replies)
Discussion started by: MykC
4 Replies

8. UNIX for Dummies Questions & Answers

regex

I am a newbie. just learning it. I want to create a regex to print the line that has the city, state and the zip code in this form:City, ST 12345 ( Any City, state and a zip code in a file) I tried everything I can, I can't get it to work. Can anyone please help? (3 Replies)
Discussion started by: Pouchie1
3 Replies

9. Shell Programming and Scripting

regex help

I would like to search strings composed by only one type of charachter for example only strings composed by the charachter 'b' is it right? $egrep '\<(b+)+\>' filename Could be there some side effects? Regards. (1 Reply)
Discussion started by: and77
1 Replies

10. Shell Programming and Scripting

gnu sed regex grouping not working?

Hello, from the gnu sed manual, I should be able to do this: `\(REGEXP\)' Groups the inner REGEXP as a whole, this is used to: * Apply postfix operators, like `\(abcd\)*': this will search for zero or more whole sequences of `abcd', while `abcd*' ... (3 Replies)
Discussion started by: Allasso
3 Replies
Login or Register to Ask a Question