我有这个文件
Array ( [0] => ROLE_ADMIN@READ@User [1] => ROLE_ADMIN_DD_USER@READ@User [2] => ROLE_DD_USER@READ@* [3] => ROLE_USER@READ@User [4] => IS_AUTHENTICATED_ANONYMOUSLY@*@User [5] => *@READ@User [6] => ROLE_ADMIN@form@User [7] => *@form@User [8] =>
我想提取 ROLE_ADMIN@READ@User
部分,然后将它们以逗号分隔。
[ ROLE_ADMIN@READ@User , ROLE_ADMIN@READ@User ]
我已经在 sed
中试过了
sed -re 's/ ([A-Z_\*]*)@([A-Za-z\*]*)@[a-z\*]*/#/g' role.txt
这已经完成了一半;我不确定下一步该怎么做。你能帮忙吗?
最佳答案
与其 try catch =>
之后的值,替换其他所有内容会更容易:
sed -e 's/.* \[0] => /[ /' -e 's/\[[0-9]*] =>/,/g' -e 's/[, ]*$/]/' role.txt
解释:
- 第一个表达式将开始部分替换为
[
- 第二个表达式将所有中间部分替换为
,
- 第三个表达式用
] 替换尾随逗号和空格
所以你最终得到:
[ ROLE_ADMIN@READ@User , ROLE_ADMIN_DD_USER@READ@User , ROLE_DD_USER@READ@* , ROLE_USER@READ@User , IS_AUTHENTICATED_ANONYMOUSLY@*@User , *@READ@User , ROLE_ADMIN@form@User , *@form@User ]
如果你想对条目进行排序,那么我推荐使用 perl
:
perl -ne '@u = m/=> *(\S+)/g; print "[ ", join(" , ", sort(@u)), " ]\n"' < role.txt
这会给你:
[ *@READ@User , *@form@User , IS_AUTHENTICATED_ANONYMOUSLY@*@User , ROLE_ADMIN@READ@User , ROLE_ADMIN@form@User , ROLE_ADMIN_DD_USER@READ@User , ROLE_DD_USER@READ@* , ROLE_USER@READ@User ]
关于regex - 如何使用 sed 在文件中创建此模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20806677/