你别管什么 NFC ,NFD ,咱只是想搜出日语呢
import Foundation import ArgumentParser @main struct Ripripgrep: ParsableCommand { @Option(name: .shortAndLong) var patterns: [String] @Argument(help: "use stdin if no args") var files: [String] = [] func validate() throws { if patterns.isEmpty { fatalError("no patterns!") } } struct Worker { var line: UnsafeMutablePointer<CChar>? var linecap = 0 let patterns: [Regex<AnyRegexOutput>] mutating func start(stream: UnsafeMutablePointer<FILE>) { while case let linelen = getline(&line, &linecap, stream), linelen > 0 { let line = String(decoding: UnsafeRawBufferPointer(start: line!, count: linelen-1), as: UTF8.self) if patterns.allSatisfy({ line.contains($0) }) { print(line) } } } } func run() throws { var worker = Worker(patterns: try patterns.map { try Regex($0).ignoresCase() }) if files.isEmpty { // use stdin worker.start(stream: stdin) } else { for file in files { let stream = fopen(file, "rb")! defer { fclose(stream) } worker.start(stream: stream) } } } }