diff --git a/pipe.go b/pipe.go
index <HASH>..<HASH> 100644
--- a/pipe.go
+++ b/pipe.go
@@ -338,12 +338,14 @@ func NumberLines() Filter {
 	}
 }
 
-// Cut emits just the bytes indexed [startOffset..endOffset] of each input item.
-func Cut(startOffset, endOffset int) Filter {
+// Slice emits just the bytes indexed [startOffset..endOffset) of each
+// input item.  Note that unlike the "cut" utility, offsets are numbered
+// starting at zero, and the end offset is not included in the output.
+func Slice(startOffset, endOffset int) Filter {
 	return func(arg Arg) {
 		for s := range arg.In {
 			if len(s) > endOffset {
-				s = s[:endOffset+1]
+				s = s[:endOffset]
 			}
 			if len(s) < startOffset {
 				s = ""
diff --git a/pipe_test.go b/pipe_test.go
index <HASH>..<HASH> 100644
--- a/pipe_test.go
+++ b/pipe_test.go
@@ -426,7 +426,7 @@ func ExampleNumberLines() {
 func ExampleCut() {
 	pipe.Run(
 		pipe.Echo("hello", "world."),
-		pipe.Cut(2, 4),
+		pipe.Slice(2, 5),
 		pipe.WriteLines(os.Stdout),
 	)
 	// Output:
renamed Cut to Slice and made it behave more like Go than the shell cut command