如何使用脚本/别名让 bash/zsh 将某些文本从“foo.foo.foo”更改为“foo foo foo”?

如何使用脚本/别名让 bash/zsh 将某些文本从“foo.foo.foo”更改为“foo foo foo”?

我可以使用<>|。也许我需要使用 grep?

答案1

您可以使用tr命令转换字符。

% echo "foo.foo.foo" | tr '.' ' ' 
foo foo foo

答案2

使用纯 bash:

bash-3.2$ a='a.a.a'
bash-3.2$ echo "${a/./ }"
a a.a
bash-3.2$ echo "${a//./ }"
a a a

答案3

您可以创建一个函数并将其添加到您的末尾~/.bashrc,例如:

nodot() {  echo "$1" | sed 's/\./ /g' ; }

使用示例:

$ nodot foo.foo.foo
foo foo foo

您也可以在 zsh 中使用此功能,只需添加到您的~/.zshrc即可。

答案4

有谁错过了awk/ perl/ python/ go


% awk '{gsub(/[.]/, " ", $0); print}' <<<'foo.foo.foo'                      
foo foo foo

% perl -pe 's/\./ /g' <<<'foo.foo.foo'                                      
foo foo foo

% python -c 'import sys; print sys.stdin.read().replace(".", " ")' <<<'foo.foo.foo'
foo foo foo

% cat input.go
package main

import (
    "os"
    "strings"
    "fmt"
)

func main () {
    args := os.Args
    if len(args) != 2 {
        fmt.Println("Not enough arguments")
        return
    }
    out := strings.Replace(args[1], ".", " ", -1)
    fmt.Println(out)
}

% go run input.go 'foo.foo.foo' 
foo foo foo

相关内容