Visit Our UNIX and Linux User Community


Need regex for line not starting with hash #


 
Thread Tools Search this Thread
Top Forums Shell Programming and Scripting Need regex for line not starting with hash #
# 1  
Old 01-16-2020
Need regex for line not starting with hash #

I need to search for lines starting with "Include" and later has string "httpd-ssl.conf"

like the regex should return match for "Include conf/extra/httpd-ssl.conf"

I tried the following:

Code:
^[[:blank:]]*[^[:blank:]#;].+Include.*httpd-ssl.conf

Below is my current file:

Code:
# Secure (SSL/TLS) connections
#Include conf/extra/httpd-ssl.conf

   #Include conf/extra/httpd-ssl.conf
#  Include conf/extra/httpd-ssl.conf
#Include conf/extra/httpd-ssl.conf


#
# Note: The following must must be present to support
#

This should not match anything but if you try my sample text and regex in regex101.com or any online regex checker it matching the first entry which has new line as a "newline".
Code:
#Include conf/extra/httpd-ssl.conf

<MATCHES IF ABOVE IS A NEWLINE>

How can we make sure that the first visible charecter of a line should be string "Include" and preceeded by string " "httpd-ssl.conf""

Last edited by mohtashims; 01-16-2020 at 03:46 AM..
# 2  
Old 01-16-2020
Please post EXACTLY what you want your final output should be after REGEX.

Please post your operating system as well.
# 3  
Old 01-16-2020
Quote:
Originally Posted by Neo
Please post EXACTLY what you want your final output should be after REGEX.

Please post your operating system as well.
Given the sample data i expect regex to return NOTHING it should NOT MATCH anything but unfortunately it does.

Mine is a Oracle Linux system.
# 4  
Old 01-16-2020
Sorry, I cannot follow what you want, exactly.

Maybe someone else has more time to decipher what exactly you want.
# 5  
Old 01-16-2020
Quote:
Originally Posted by mohtashims
I need to search for lines starting with "Include" and later has string "httpd-ssl.conf"

like the regex should return match for "Include conf/extra/httpd-ssl.conf"
I tried the following:
.
.
.
Below is my current file:
.
.
.
This should not match anything...
Don't worry, your overcomplicated regex doesn't match anything reasonable in your file, if that is what you're after (not clear from your spec). Even uncommented lines with # removed (which I added to your sample file) aren't matched:


Code:
$ grep "^[[:blank:]]*[^[:blank:]#;].+Include.*httpd-ssl.conf" file
$ grep -E "^[[:blank:]]*[^[:blank:]#;].+Include.*httpd-ssl.conf" file
$ sed -n '/^[[:blank:]]*[^[:blank:]#;].+Include.*httpd-ssl.conf/p' file

You could have tried yourself on your "Oracle Linux system", also questioning your online regex tester.



See the detailed, step by step analysis of your regex (culprit seem to be items 3 and 4):



Code:
^[[:blank:]]*[^[:blank:]#;].+Include.*httpd-ssl.conf


^                       # start of line
[[:blank:]]*            # any number of space, TAB, newline
[^[:blank:]#;]          # ONE char non-blank, non-#, non-;
.+                      # ONE or many chars, whichever
Include                 # string constant "Include"
.*                      # any number of any char
httpd-ssl.conf          # string constant


Last edited by RudiC; 01-16-2020 at 06:43 AM..
These 2 Users Gave Thanks to RudiC For This Post:
# 6  
Old 01-16-2020
Quote:
Originally Posted by RudiC
Don't worry, your overcomplicated regex doesn't match anything reasonable in your file, if that is what you're after (not clear from your spec). Even uncommented lines with # removed (which I added to your sample file) aren't matched:


Code:
$ grep "^[[:blank:]]*[^[:blank:]#;].+Include.*httpd-ssl.conf" file
$ grep -E "^[[:blank:]]*[^[:blank:]#;].+Include.*httpd-ssl.conf" file
$ sed -n '/^[[:blank:]]*[^[:blank:]#;].+Include.*httpd-ssl.conf/p' file

You could have tried yourself on your "Oracle Linux system", also questioning your online regex tester.



See the detailed, step by step analysis of your regex (culprit seem to be items 3 and 4):



Code:
^[[:blank:]]*[^[:blank:]#;].+Include.*httpd-ssl.conf


^                       # start of line
[[:blank:]]*            # any number of space, TAB, newline
[^[:blank:]#;]          # ONE char non-blank, non-#, non-;
.+                      # ONE or many chars, whichever
Include                 # string constant "Include"
.*                      # any number of any char
httpd-ssl.conf          # string constant

@Rudic thank you for the explanation.

Let's consider a sample file like below:

Code:
    
    530 #Include conf/extra/httpd-ssl.conf
    531
    532      Include conf/extra/httpd-ssl.conf
    533 #  Include conf/extra/httpd-ssl.conf
    534 Include conf/extra/httpd-ssl.conf
    535 #    Include conf/extra/httpd-ssl.conf
    536 #Include conf/extra/httpd-ssl.conf
    537 #

Note: the left numbering(5**) is only the line number populated using set nu of vi editor and not the actual file content.

The explanation that you gave for my regex should atleast match line number "532" but it does not.

Line number "532" passes all of the below but the command still fails to yeild any matches(output):

Code:
^                       # start of line
[[:blank:]]*            # any number of space, TAB, newline
[^[:blank:]#;]          # ONE char non-blank, non-#, non-;
.+                      # ONE or many chars, whichever
Include                 # string constant "Include"
.*                      # any number of any char
httpd-ssl.conf          # string constant

Can you please explain why ?

Nevertheless the below regex works for me and gets me unhashed lines starting with "Include" followed by "httpd-ssl.conf"

Code:
# grep -E "^[[:blank:]]*[^[:blank:]#;].+Include.*httpd-ssl.conf" /tmp/httpd.conf
Fails for the sample data shared in this post for reasons I wish to know 
# grep -E "^[^#]*Include.+httpd-ssl.conf" /tmp/httpd.conf
   Include conf/extra/httpd-ssl.conf
Include conf/extra/httpd-ssl.conf
Passes.


Last edited by mohtashims; 01-16-2020 at 07:25 AM..
# 7  
Old 01-16-2020
Code:
[^[:blank:]#;]          # ONE char non-blank, non-#, non-;

These 2 Users Gave Thanks to RudiC For This Post:

Previous Thread | Next Thread

10 More Discussions You Might Find Interesting

1. Shell Programming and Scripting

Remove new line starting with a numeric value and append it to the previous line

Hi, i have a file with multiple entries. After some tests with sed i managed to get the file output as follows: lsn=X-LINK-IN0,apc=661:0,state=avail,avail/links=1/1, 00,2110597,2094790,0,81,529,75649011,56435363, lsn=TM1ITP1-AM1ITP1-LS,apc=500:0,state=avail,avail/links=1/1,... (5 Replies)
Discussion started by: nms
5 Replies

2. UNIX for Dummies Questions & Answers

How to grep a line not starting with # from a file (there are two lines starting with # and normal)?

e.g. File name: File.txt cat File.txt Result: #INBOUND_QUEUE=FAQ1 INBOUND_QUEUE=FAQ2 I want to get the value for one which is not commented out. Thanks, (3 Replies)
Discussion started by: Tanu
3 Replies

3. Shell Programming and Scripting

With script bash, read file line per line starting at the end

Hello, I'm works on Ubuntu server My goal : I would like to read file line per line, but i want to started at the end of file. Currently, I use instructions : while read line; do COMMAND done < /var/log/apache2/access.log But, the first line, i don't want this. The file is long... (5 Replies)
Discussion started by: Fuziion
5 Replies

4. Shell Programming and Scripting

How to print line starting with certain string together with its following line?

Dear all, How can I print line starting with certain string together with its following line. Example is as follows: Input file: @M01596:22:000000000-A7YH7:1:1101:16615:1070 2:N:0:1... (2 Replies)
Discussion started by: huiyee1
2 Replies

5. Shell Programming and Scripting

Using regex's from file1, print line and line after matches in file2

Good day, I have a list of regular expressions in file1. For each match in file2, print the containing line and the line after. file1: file2: Output: I can match a regex and print the line and line after awk '{lines = $0} /Macrosiphum_rosae/ {print lines ; print lines } ' ... (1 Reply)
Discussion started by: pathunkathunk
1 Replies

6. 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

7. UNIX for Dummies Questions & Answers

How to specify beginning-of-line/end-of-line characters inside a regex range

How can I specify special meaning characters like ^ or $ inside a regex range. e.g Suppose I want to search for a string that either starts with '|' character or begins with start-of-line character. I tried the following but it does not work: sed 's/\(\)/<do something here>/g' file1 ... (3 Replies)
Discussion started by: jawsnnn
3 Replies

8. Shell Programming and Scripting

Perl: Any quick way to use regex on hash keys?

Hi, Is there any quick way to use pull out keys that match a specific regex pattern? eg %hash ; $hash(123,456) = xxx; $hash(123,457) = xxx; $hash(123,458) = xxx; $hash(223,459) = xxx; I need a fast way to get all the keys that start with 123.. Meaning I should get ... (5 Replies)
Discussion started by: Leion
5 Replies

9. Shell Programming and Scripting

sed: delete regex line and next line if blank

Hi, I want to write a sed script which from batiato: batiato/giubbe: pip_b.2.txt pip_b.3.txt pip_b.3mmm.txt bennato: bennato/peterpan: 123.txt consoli: pip_a.12.txt daniele: (2 Replies)
Discussion started by: one71
2 Replies

10. Shell Programming and Scripting

how to delete text from line starting pattern1 up to line before pattern2?

My data is xml'ish (here is an excerpt) :- <bag name="mybag1" version="1.0"/> <contents id="coins"/> <bag name="mybag2" version="1.1"/> <contents id="clothes"/> <contents id="shoes"/> <bag name="mybag3" version="1.6"/> I want to delete line containing mybag2 and its subsequent... (5 Replies)
Discussion started by: repudi8or
5 Replies

Featured Tech Videos