#!/usr/bin/crystal def delete(arg) `find -name #{arg}`.each_line do |i| File.delete(i) end end def nth_word(arg) i = arg.to_u64 - 1 STDIN.each_line do |line| puts line.split[i] rescue "" end end def trim() STDIN.each_line do |line| puts line.strip end end def lines() if !STDIN.tty? puts STDIN.gets_to_end.count("\n") else res = `find .`.count("\n") - 1 puts res end end def args(arg1) sections = Process.parse_arguments(arg1) program, args = sections[0], sections[1..] sections = Process.parse_arguments(arg1) program = Process.find_executable(program) if program.nil? puts "Can't find program #{arg1}" raise "Error" end lines = STDIN.gets_to_end.strip lines = lines.split "\n" times = (lines.size % 2000000 == 0) ? 2 : 1 times += lines.size // 2000000 n = 0 times.times do prog_args = args prog_args += lines[n..(n + 2000000 - 1)]; n += 2000000 if (p = Process.fork).nil? Process.exec( program, prog_args ) else p.wait end end end def mul() t = STDIN.read_line.to_f64 i = 0f64; STDIN.each_line do |line| t *= line.to_f64 end puts t end def add() t = STDIN.read_line.to_f64 i = 0f64; STDIN.each_line do |line| t += line.to_f64 end puts t end def div() t = STDIN.read_line.to_f64 i = 0f64; STDIN.each_line do |line| t /= line.to_f64 end puts t end def sub() t = STDIN.read_line.to_f64 i = 0f64; STDIN.each_line do |line| t -= line.to_f64 end puts t end def floor() puts STDIN.read_line.to_f64.to_i64 end def abs() STDIN.each_line do |l| l = l.to_f64.abs puts l end end def exp() t = STDIN.read_line.to_f64 STDIN.each_line do |line| t **= line.to_f64 end puts t end def nth(arg1) end_ = arg1.to_u64 i = 0u64; STDIN.each_line do |line| i += 1 if i == end_ puts line break end end end def last_nth(arg1) end_ = arg1.to_u64 i = 0u64 t = STDIN.gets_to_end if t[-1] == '\n' t = t[0..-2] end t.split("\n").reverse_each do |line| i += 1 if i == end_ puts line break end end end def gsubip(arg1, arg2, arg3) regex = Regex.new(arg1) text = File.read(arg3).gsub(/#{arg1}/m, arg2) File.open(t = File.tempname("coreutils", "_tmp"), "w", File.info(arg3).permissions) do |h| h.print text end begin File.rename t, arg3 rescue rm t end end def rip(arg1, arg2, arg3) text = File.read(arg3).gsub(arg1, arg2) File.open(t = File.tempname("coreutils", "_tmp"), "w", File.info(arg3).permissions) do |h| h.print text end begin File.rename t, arg3 rescue rm t end end def gsub(arg1, arg2) print STDIN.gets_to_end.gsub(/#{arg1}/m, arg2) end def rnip(arg1, arg2) print STDIN.gets_to_end.gsub(arg1, arg2) end def selectlines() STDIN.each_line do |line| if line.strip.size > 0 puts line end end end def swap(file1, file2) [file1, file2].each do |f| File.exists?(f) || abort("No file named #{f.dump}") end t = File.tempname("coreutils", "_tmp") File.rename file1, t File.rename file2, file1 File.rename t, file2 end def prepend(file) file_data = File.read(file) new_data = STDIN.gets_to_end File.open(t = File.tempname("coreutils", "_tmp"), "w", File.info(file).permissions) do |h| h << new_data + file_data end begin File.rename t, file rescue rm t end end def append(file) file_data = File.read(file) new_data = STDIN.gets_to_end File.open(t = File.tempname("coreutils", "_tmp"), "w", File.info(file).permissions) do |h| h << file_data + new_data end begin File.rename t, file rescue rm t end end class Funcs def self.argument_data(program, usage, long_desc) if !(STDOUT.tty?) text = "
\n" else text = "" end text += ("NAME") + "\n\t" + program text += " - " text += program + "\n" * 2 + ("SYNOPSIS") + "\n" # tebold_("SYNOPSIS_")# + bold("SYNOPSIS") text += "\t" text += (program) + " " text += usage + "\n\n" text += long_desc + "\n\n" if STDOUT.tty? == false text = text.gsub("\n", "
").gsub("\t", " " * 5) text += "
\n\n" end puts text end end def main() if ARGV.size != 3 Funcs.argument_data("gsubip", "[gsubip] [arguments]", "Global Substitute (Gsub) In Place\n\ngsubip is like gsub, which replaces all instances of a regular expression globally\n\n[regular expression 1] [regular expression 2] => result\n\nExample\n\ngsubip . FOO file\n\nWould make all characters in “file” become “FOO”\n\ngsubip cat dog file\n\nWould make all instances of “cat” “dog”\n\nIt is much cleaner than “sed.”\n\nYou don't need to have “sed” installed to run this program.\n\nIt doesn't read from the standard input\n\nIt takes exactly 3 arguments, no more, no fewer.\n\nSee also\n\ngsub") exit 1 end gsubip(ARGV[0], ARGV[1], ARGV[2]) end main