gpt4 book ai didi

linux - 整合sed命令

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

我有一个名为 $string 的字符串

string='-d $DESTDIR/ERRORS/$BASEDIR ]] || $MKDIR -p     word1 word22   word3.5'

目前,我正在通过 sed 将其管道传输两次。一次拉出特殊字符,然后再次将空格/制表符更改为单个空格。

echo $string | sed 's/[^a-zA-Z0-9]/ /g' | sed 's/\s\s*/ /g'
output='d DESTDIR ERRORS BASEDIR MKDIR p word1 word22 word3 5'

虽然这可行,但我希望获得一些效率。有人可以帮助我将其合并为一个 sed 命令吗?

编辑我应该注意到这需要与 HP/SOL/LIN 的 POSIX 兼容

最佳答案

使用tr:

echo $string | tr -Cs a-zA-Z0-9 ' '

tr 是一个非常强大(且快速)的翻译、删除和压缩字符的工具。

此特定命令将第一组 (a-zA-Z0-9) 的C complement 中的每个字符转换为第二组中的字符;因为第二组只包含一个空格,所以这会将所有非字母数字字符(包括制表符)转换为空格。然后它s将第二个字符集中的所有字符序列压缩成一个字符;这会用单个空格替换连续的空格。

例子:

$ string='-d $DESTDIR/ERRORS/$BASEDIR ]] || $MKDIR -p     word1 word22   word3.5'
$ output=$(echo $string | tr -Cs 'a-zA-Z0-9' ' ')
$ echo $output
d DESTDIR ERRORS BASEDIR MKDIR p word1 word22 word3 5

关于linux - 整合sed命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12506500/

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