Bash提取文本和文件路径,过滤,处理和输出

时间:2017-01-16 19:45:32

标签: regex bash sed grep

我有一个SVN服务器托管带有apache前端的repos。大多数repos使用LDAP身份验证,但有些需要使用htpasswd进行身份验证的外部访问。

我的apache conf for subversion repos在.conf文件中使用了以下一系列块(简化)

<Location /svn/reponame>
DirectiveName directivevalue
AnotherDirectiveName "anotherDirectiveValue"

AuthUserFile /share/htpasswdfilename

<Limit GET PROPFIND OPTIONS REPORT>
    Order allow,deny
    Allow from 123.123.123.123
    Satisfy Any
</Limit>
</Location>

为了快速找到活跃的外部用户,我可以使用以下内容

 cat subversion.conf | grep AuthUserFile | sed 's/.*\//\/share\//' | xargs cat

将捕获活动htpasswd文件的内容,如下所示

username:password
username:password
username:password

为了使这个输出更有意义,我真的想在每个条目前面添加<Location xxx>块中的repo名称,例如

/svn/reponame1 - username:password
/svn/reponame2 - username:password
/svn/reponame3 - username:password

1 个答案:

答案 0 :(得分:2)

听起来这就是你所需要的:

awk '
BEGIN { OFS=" - " }
NR==FNR {
    if ( sub(/^<Location +/,"") ) {
        sub(/>$/,"")
        location = $0
    }
    else if ( sub(/^AuthUserFile +/,"") ) {
        loc[$0] = location
        ARGV[ARGC++] = $0
    }
    next
}
{ print loc[FILENAME], $0 }
' subversion.conf

上述情况当然未经测试,因为您没有提供可测试的样本输入。