gpt4 book ai didi

linux - 使用 sed 删除 _ 和 - 字符

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:19:55 24 4
gpt4 key购买 nike

我正在尝试使用 sed 将 2015-06-03_18-05-30 转换为 20150603180530

我有这个:

$ var='2015-06-03_18-05-30'
$ echo $var | sed 's/\-\|\_//g'
$ echo $var | sed 's/-|_//g'

这些都不起作用。为什么交替不起作用?

最佳答案

只要您的脚本有 #!/bin/bash(或 ksh 或 zsh)shebang,就不要使用 sed tr:您的 shell 可以内置执行此操作,而无需(相对较大的)启动任何外部工具的开销:

var='2015-06-03_18-05-30'
echo "${var//[-_]/}"

也就是说,如果您真的想使用sed,GNU 扩展-r 启用ERE 语法:

$ sed -r -e 's/-|_//g' <<<'2015-06-03_18-05-30'
20150603180530

有关 BRE(sed 的默认值)和 ERE 之间差异的讨论,请参阅 http://www.regular-expressions.info/posix.html。该页面在讨论 ERE 扩展时指出:

Alternation is supported through the usual vertical bar |.


如果你想在 POSIX 平台上工作——使用 /bin/sh 而不是 bash,并且没有 GNU 扩展——那么重新格式化你的正则表达式以使用字符类(并且,避免 platform-dependent compatibility issues with echo [1],改用printf):

printf '%s\n' "$var" | sed 's/[-_]//g'

[1] - 请特别参阅该链接的“应用程序使用”部分。

关于linux - 使用 sed 删除 _ 和 - 字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30655368/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com