cut 切割字符串
cut
有几个参数, 分别提供了不同的用法。
$ echo abcdefg |cut -b 1,5
ae
$ echo abcdefg |cut -b 1-5
abcde
这种情况, 相当于在 Go 中的切片操作
func CutB() {
s := "abcdefg"
b1 := s[0] // (1) var b1 byte
fmt.Println(string(b1)) // cut -b 1
fmt.Println(s[0:5]) // (2) cut -b 1-5
}
这里需要注意的是
- 如果对字符串取 1个值, 则取出来的值是
byte
类型。 例如这里的b1
- Go 中的索引是 从 0 开始 计数; 且属于 左闭又开 模式, 即 左包含右不包含。
在使用 -d
的时候, 可以指定 分割符。
$ a-bc-de-123-a |cut -d '-' -f 2
bc
在 Go 中, 使用标准库 strings.Split
进行字符串分割
func CutSplit() {
s := `a-bc-de-123-a`
list := strings.Split(s, "-") // (1) var list []string
fmt.Println(list[1]) // 取第 2 个位置
// Output: bc
s2 := strings.Join(list, "/") // (2)
fmt.Println(s2)
// Output: a/bc/de/123/a
}
这里需要注意的是,
- 使用
strings.Split
拆分字符串后, 将会得到一个 切片。 如果指定的分隔符不存在, 也将得到一个长度为 1 的切片, 内容就是字符串本身。 - 拆分之后, 可以使用
strings.Join
将切片重新组合成一个字符串。 如果切片长度为 1, 则得到字符串本身(没有分隔符)。