github.com/metux/go-metabuild@v0.0.0-20240118143255-d9ed5ab697f9/util/str.go (about) 1 package util 2 3 import ( 4 "strings" 5 ) 6 7 func ValIf[K interface{}](b bool, yes K, no K) K { 8 if b { 9 return yes 10 } 11 return no 12 } 13 14 func StrListFilter(s []string, f func(s string) string) []string { 15 result := make([]string, len(s)) 16 for x, y := range s { 17 result[x] = f(y) 18 } 19 return result 20 } 21 22 func StrLinesGrep(text string, match string) []string { 23 lines := []string{} 24 for _, l := range strings.Split(text, "\n") { 25 if strings.Contains(l, match) { 26 lines = append(lines, l) 27 } 28 } 29 return lines 30 } 31 32 // scan through lines and extract the x'th field 33 func StrLinesFieldX(lines []string, fieldnum int) []string { 34 res := []string{} 35 for _, l := range lines { 36 a := strings.Fields(l) 37 if len(a) > fieldnum { 38 res = append(res, a[fieldnum]) 39 } 40 } 41 return res 42 } 43 44 func StrPrefix(prefix string, lines []string) []string { 45 for idx, x := range lines { 46 lines[idx] = prefix + x 47 } 48 return lines 49 } 50 51 func StrDirPrefix(prefix string, lines []string) []string { 52 if prefix != "" { 53 if !strings.HasSuffix(prefix, "/") { 54 prefix = prefix + "/" 55 } 56 for idx, v := range lines { 57 lines[idx] = prefix + v 58 } 59 } 60 return lines 61 } 62 63 func StrEscLF(str string) string { 64 return strings.Replace( 65 strings.Trim(str, " \n"), "\n", "\\n", -1) 66 } 67 68 func YesNo(yes bool) string { 69 if yes { 70 return "yes" 71 } else { 72 return "no" 73 } 74 } 75 76 func StrSplitTwo(s string, d string) (string, string) { 77 sp := strings.Split(s, d) 78 if len(sp) == 1 { 79 return strings.TrimSpace(sp[0]), "" 80 } else { 81 return strings.TrimSpace(sp[0]), strings.TrimSpace(sp[1]) 82 } 83 }