dig_123
dig_123

Reputation: 2358

search multiple strings in a single line with multiple spaces in between

I want to search for the whole line below from my /etc/pam.d/su file to use it in a script:

    auth required pam_wheel.so use_uid

there might be multiple spaces in between, and it might be commented out also, with multiple #'s

This is what I'm using :

     grep "^#*auth +required +pam_wheel\.so +use_uid$"

, but it doesn't yield anything

I'm certainly doing something wrong, but what am I doing wrong? Sorry, have always been bad with regular expressions

Upvotes: 0

Views: 2262

Answers (3)

dig_123
dig_123

Reputation: 2358

Well this finally works for me:

    [root@server4 ~]# egrep "^#*auth.*required.*pam_wheel\.so.*use_uid" /etc/pam.d/su
    #auth           required        pam_wheel.so use_uid

I think the issue is in how we are mentioning the spaces.

Upvotes: 0

Thomas Dickey
Thomas Dickey

Reputation: 54495

egrep is the way to go, but the question said "multiple" spaces. That can be done like this

egrep "^([[:space:]]*#)*[[:space:]]*auth[[:space:]]+required[[:space:]]+pam_wheel\.so[[:space:]]+use_uid[[:space:]]*$"

A backslashed space "\ " is not listed in the special escapes in regex(7) Instead, the POSIX character class can be used. You could also use blank (a GNU extension) rather than space to make this only space/tab.

Upvotes: 1

Chris Maes
Chris Maes

Reputation: 37712

you can use grep -E (extended regexp)

grep -E "^\ +auth\ +required\ +pam_wheel\.so +use_uid$"

this works:

echo "   auth required  pam_wheel.so   use_uid" | grep -E "^\ +auth\ +required\ +pam_wheel\.so +use_uid$"

gives

   auth required  pam_wheel.so   use_uid

Upvotes: 0

Related Questions