修改正则表达式以添加新功能

时间:2016-12-06 13:38:17

标签: regex linux bash

我目前正在使用以下正则表达式删除域名并为服务器列表中的主机创建短名称。

(-net|-bck|-adm|\..*)(\..*|$) -> blank

现在,我想修改它,以便它也可以将包含UPPERCASE的任何主机名转换为小写。我目前正在使用以下正则表达式执行

(\w) -> \L$1

任何想法如何将两个正则表达式合并为一个?

我正在寻找可以进行如下转换的正则表达式:

Hostname  | New Hostname
--------- | ------------
test1-net | test1
Test2-adm | test2
TEST3     | test3
TEST-prod | test-prod
Test5-bkp | test5-bkp
test.nic  | test
Test6-bck | test6
=========================

希望上面的例子有助于理解我的要求。

1 个答案:

答案 0 :(得分:1)

我不确定你使用的是什么工具,但是不能仅仅连接正则表达式?

(.*)(-net|-bck|-adm|\..*)(\..*|$) -> \L$1

第一组中的所有内容都将小写,其余(-net|-bck|-adm|\..*)(\..*|$)将被删除。

请注意,(\..*|$)之后的任何内容都不会跟.*一样,并且在字符串结束之前会丢弃所有内容。

编辑:如果您想要小写所有内容而不删除任何内容(如果第二个正则表达式不匹配),只需使用?选择第二个正则表达式,如下所示:

(.*)((-net|-bck|-adm|\..*)(\..*|$))? -> \L$1