Skip to main content
Commonmark migration
Source Link

I'm pretty good at using php's preg_match (and similar) commands, and I'm also pretty good with regular expressions, but I don't do very well with sed.

I have two shell scripts I'm working on and I'd like to be able to pull some variables out of configuration files.

###First File

First File

The first file is an .htaccess file and I want to grab the web address, which is going to be in a block that looks like this:

RewriteCond %{HTTP_HOST} !^www\.mysite\.net$
RewriteRule (.*) http://www.mysite.net/$1 [R=301,L]

The syntax of the .htaccess file is going to be pretty regular so I feel like I should use a pattern similar to #.*(http.*?)\$#is which does:

  • regular expression
  • delimited by #
  • 0 or more characters before http
  • start capturing at the http with the non-greedy symbol ?
  • continue capturing until you hit an actual dollar sign (escaped)
  • match case insensitive
  • ignore whitespace / newlines

How can I use that regular expressionwith a command like sed so that I get the part inside parenthesis if it matches, and nothing (empty string) if it does not match?

Would I be better off using another command besides sed if I am used to php's PCRE?

###Second File

Second File

The second file is a little different because it is an .ini file and so I wonder if there might be some shell magic (I use bash) in order to parse it. The chunk I want looks like this:

[Database]
database          = mysql://user:password@localhost/database

If I was using PHP and regular expressions I would do something like this:

#\s+database\s*=\s*mysql://([\:]+):([\@]+)@([\/]+)/(.*?)\s+#is

In PHP there is an .ini parser, but I want this to be a shell/bash script, not a PHP script

How can I use that regular expression to get the database connect credentials?

I'm pretty good at using php's preg_match (and similar) commands, and I'm also pretty good with regular expressions, but I don't do very well with sed.

I have two shell scripts I'm working on and I'd like to be able to pull some variables out of configuration files.

###First File

The first file is an .htaccess file and I want to grab the web address, which is going to be in a block that looks like this:

RewriteCond %{HTTP_HOST} !^www\.mysite\.net$
RewriteRule (.*) http://www.mysite.net/$1 [R=301,L]

The syntax of the .htaccess file is going to be pretty regular so I feel like I should use a pattern similar to #.*(http.*?)\$#is which does:

  • regular expression
  • delimited by #
  • 0 or more characters before http
  • start capturing at the http with the non-greedy symbol ?
  • continue capturing until you hit an actual dollar sign (escaped)
  • match case insensitive
  • ignore whitespace / newlines

How can I use that regular expressionwith a command like sed so that I get the part inside parenthesis if it matches, and nothing (empty string) if it does not match?

Would I be better off using another command besides sed if I am used to php's PCRE?

###Second File

The second file is a little different because it is an .ini file and so I wonder if there might be some shell magic (I use bash) in order to parse it. The chunk I want looks like this:

[Database]
database          = mysql://user:password@localhost/database

If I was using PHP and regular expressions I would do something like this:

#\s+database\s*=\s*mysql://([\:]+):([\@]+)@([\/]+)/(.*?)\s+#is

In PHP there is an .ini parser, but I want this to be a shell/bash script, not a PHP script

How can I use that regular expression to get the database connect credentials?

I'm pretty good at using php's preg_match (and similar) commands, and I'm also pretty good with regular expressions, but I don't do very well with sed.

I have two shell scripts I'm working on and I'd like to be able to pull some variables out of configuration files.

First File

The first file is an .htaccess file and I want to grab the web address, which is going to be in a block that looks like this:

RewriteCond %{HTTP_HOST} !^www\.mysite\.net$
RewriteRule (.*) http://www.mysite.net/$1 [R=301,L]

The syntax of the .htaccess file is going to be pretty regular so I feel like I should use a pattern similar to #.*(http.*?)\$#is which does:

  • regular expression
  • delimited by #
  • 0 or more characters before http
  • start capturing at the http with the non-greedy symbol ?
  • continue capturing until you hit an actual dollar sign (escaped)
  • match case insensitive
  • ignore whitespace / newlines

How can I use that regular expressionwith a command like sed so that I get the part inside parenthesis if it matches, and nothing (empty string) if it does not match?

Would I be better off using another command besides sed if I am used to php's PCRE?

Second File

The second file is a little different because it is an .ini file and so I wonder if there might be some shell magic (I use bash) in order to parse it. The chunk I want looks like this:

[Database]
database          = mysql://user:password@localhost/database

If I was using PHP and regular expressions I would do something like this:

#\s+database\s*=\s*mysql://([\:]+):([\@]+)@([\/]+)/(.*?)\s+#is

In PHP there is an .ini parser, but I want this to be a shell/bash script, not a PHP script

How can I use that regular expression to get the database connect credentials?

Source Link
cwd
  • 47.2k
  • 73
  • 156
  • 172

How can I find matches with sed (or similar) for configuration parameters?

I'm pretty good at using php's preg_match (and similar) commands, and I'm also pretty good with regular expressions, but I don't do very well with sed.

I have two shell scripts I'm working on and I'd like to be able to pull some variables out of configuration files.

###First File

The first file is an .htaccess file and I want to grab the web address, which is going to be in a block that looks like this:

RewriteCond %{HTTP_HOST} !^www\.mysite\.net$
RewriteRule (.*) http://www.mysite.net/$1 [R=301,L]

The syntax of the .htaccess file is going to be pretty regular so I feel like I should use a pattern similar to #.*(http.*?)\$#is which does:

  • regular expression
  • delimited by #
  • 0 or more characters before http
  • start capturing at the http with the non-greedy symbol ?
  • continue capturing until you hit an actual dollar sign (escaped)
  • match case insensitive
  • ignore whitespace / newlines

How can I use that regular expressionwith a command like sed so that I get the part inside parenthesis if it matches, and nothing (empty string) if it does not match?

Would I be better off using another command besides sed if I am used to php's PCRE?

###Second File

The second file is a little different because it is an .ini file and so I wonder if there might be some shell magic (I use bash) in order to parse it. The chunk I want looks like this:

[Database]
database          = mysql://user:password@localhost/database

If I was using PHP and regular expressions I would do something like this:

#\s+database\s*=\s*mysql://([\:]+):([\@]+)@([\/]+)/(.*?)\s+#is

In PHP there is an .ini parser, but I want this to be a shell/bash script, not a PHP script

How can I use that regular expression to get the database connect credentials?