《Shell 转 Go》
Toggle Dark/Light/Auto mode Toggle Dark/Light/Auto mode Toggle Dark/Light/Auto mode Back to homepage

cut 切割字符串

cut 有几个参数, 分别提供了不同的用法。

1. -b 获取字符或字符串

$ 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. 如果对字符串取 1个值, 则取出来的值是 byte 类型。 例如这里的 b1
  2. Go 中的索引是 从 0 开始 计数; 且属于 左闭又开 模式, 即 左包含右不包含

2. -d 指定分隔符, -f 指定分段位置

在使用 -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
}

这里需要注意的是,

  1. 使用 strings.Split 拆分字符串后, 将会得到一个 切片。 如果指定的分隔符不存在, 也将得到一个长度为 1 的切片, 内容就是字符串本身。
  2. 拆分之后, 可以使用 strings.Join 将切片重新组合成一个字符串。 如果切片长度为 1, 则得到字符串本身(没有分隔符)。