【问题标题】:Regex to remove . and - in string using shell script正则表达式删除 .和 - 在字符串中使用 shell 脚本
【发布时间】:2021-07-31 15:23:16
【问题描述】:

我有一个字符串 com.xyx.it.abc.sweta-test-parameter 我需要将其转换为com/xyz/it/abc/swetatestparameter

如何使用 Regex 实现输出?

我需要更换。使用 / 并从字符串中删除 - 以下是我尝试过的尝试:

Package_Name="com.xyx.it.abc.sweta-test-parameter"
Package=${Package_Name//-//}

输出是:

com/xyx/it/abc/sweta-test-parameter

有人可以帮忙吗?

感谢您的所有帮助!提前致谢!

【问题讨论】:

  • 添加了尝试
  • 使用sedsed 's/-//g; s~\.~/~g' <<< "$Package_Name"
  • 感谢您的回复。如何将上述解决方案分配给变量?
  • 阅读命令替换
  • 非常感谢,不过,我很想知道你是怎么想出这样一个正则表达式的?有什么诀窍吗?

标签: regex linux bash shell sh


【解决方案1】:

正如 cmets 中所建议的,sed 将完成这项工作。请尝试将Package=${Package_Name//-//} 替换为

Package=$(sed 's/\./\//g; s/-//g' <<< "$Package_Name")

【讨论】:

    【解决方案2】:

    你可以直接在bash中做,但是需要两个步骤:

    Package_Name="com.xyx.it.abc.sweta-test-parameter"
    
    Package=${Package_Name//.//}    # Replace each "." with "/"
    Package=${Package//-/}          # Replace each "-" with "" (i.e. delete them)
    
    echo "$Package"                 # Prints "com/xyx/it/abc/swetatestparameter"
    

    请注意,这不使用正则表达式。替换机制支持 glob 模式(文件名样式的通配符),但这甚至不使用它,只是纯字符串。

    【讨论】:

    • 非常感谢 Gordon 的回答!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-13
    • 2010-12-10
    • 2011-11-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多