-
cleemy desu wayo authored295ed628
yass-c-sed.rb 1.57 KiB
#!/usr/bin/env ruby## ==========================================================================# yass-c-sed.rb -- version 0.0.99.20231019## written by cleemy desu wayo / Licensed under CC0 1.0## official repository: https://gitlab.com/cleemy-desu-wayo/yass# ==========================================================================def error_exit(error_msg) raise "ERROR: #{error_msg}"enderror_exit('lack of sed code') if ARGV.length < 1if ARGV[0] !~ /\A(\/[0-9a-zA-Z]+\/);(.*)/ error_exit('specify a delimiter at the beginning (such as "/a62z4E2hH2q/;")')enddelimiter = $1sed_code_body = $2sed_code_list = []token_list = []tmp_list = sed_code_body.split(delimiter, -1)tmp_list.each_with_index do |token, i| if i == 0 error_exit('invalid sed code (1)') unless token.lstrip == 's' token_list = ['s'] elsif i % 3 == 0 if token.start_with?('g') token_list << 'g' else token_list << '' end token = token.sub(/^g?\s*/, '') if i == (tmp_list.length - 1) error_exit('invalid sed code (2)') unless token =~ /^;?\s*$/ else error_exit('invalid sed code (3)') unless token =~ /^;\s*s$/ end sed_code_list << token_list token_list = ['s'] elsif i % 3 == 1 or i % 3 == 2 token_list << token endendSTDIN.readlines.each do |line| replaced_line = line sed_code_list.each do |token_list| if token_list[3] == 'g' replaced_line = replaced_line.gsub(token_list[1], token_list[2]) else replaced_line = replaced_line.sub(token_list[1], token_list[2]) end end puts replaced_lineend