Я могу, возможно, использовать <
или >
или |
. Возможно, я должен использовать grep?
Можно сделать функцию и добавить в конец Вашего ~/.bashrc
, например:
nodot() { echo "$1" | sed 's/\./ /g' ; }
пример использования:
$ nodot foo.foo.foo
foo foo foo
можно использовать эту функцию в zsh также, просто добавить к Вашему ~/.zshrc
вместо этого.
Можно использовать команда tr для преобразования символа.
% echo "foo.foo.foo" | tr '.' ' '
foo foo foo
Используя чистый удар:
bash-3.2$ a='a.a.a'
bash-3.2$ echo "${a/./ }"
a a.a
bash-3.2$ echo "${a//./ }"
a a a
Используя Internal Field Separator (IFS)
переменная:
bash-4.3$ old_ifs=$IFS
bash-4.3$ IFS="."
bash-4.3$ var="foo.foo.foo"
bash-4.3$ echo $var
foo foo foo
bash-4.3$ IFS=$old_ifs
Это может быть помещено приятно в функцию:
split_dot()
{
string="$1"
if set | grep -q "IFS";
then
ifs_unset="false"
old_ifs=$IFS
else
ifs_unset="true"
fi
IFS="."
echo $string
if [ "$ifs_unset" == "true" ];
then
unset IFS
else
IFS=$old_ifs
fi
}
И выполненный как так:
bash-4.3$ split_dot "foo.baz.bar"
foo baz bar
Можно использовать xargs
также. Вот острота с помощью xargs
$ echo "foo.foo.foo" | xargs -d .
foo foo foo
Любой отсутствовал 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