println("output"); print("no newline"); printf("%d items%n", 3)
System.err.println("error")
val line = scala.io.StdIn.readLine("Name: ")
val n = scala.io.StdIn.readInt()
22.4 os-lib (Li Haoyi — ergonomic file & process API)
//> using dep com.lihaoyi::os-lib:0.11.3
os.write(os.pwd / "out.txt", "hello")
os.read(os.pwd / "out.txt")
os.read.lines(os.pwd / "data.csv")
os.list(os.pwd), os.walk(os.pwd), os.remove.all(os.pwd / "tmp")
os.copy(src, dest), os.move(src, dest), os.makeDir.all(os.pwd / "a" / "b")
os.proc("git", "status").call().out.text()
22.5 Regular expressions
val email = """(\w+)@([\w.]+)""".r
email.findFirstIn("contact: me@x.com") // Some("me@x.com")
email.findAllIn("a@b.c d@e.f").toList
email.findFirstMatchIn("me@x.com").map(_.group(2)) // Some("x.com")
email.replaceAllIn("me@x.com", m => s"${m.group(1)} at ${m.group(2)}")
"me@x.com".matches("""\w+@[\w.]+""")
val Phone = raw"(\d{3})-(\d{4})".r
"555-1234" match { case Phone(a, b) => a + b }
22.6 Process execution
import scala.sys.process.*
val out = "ls -l".!! // capture output
val code = "ls".! // exit code
(Seq("echo", "hi") #| Seq("tr", "a-z", "A-Z")).!!