Skip to content

Instantly share code, notes, and snippets.

@td-shi
Created July 31, 2021 13:49
Show Gist options
  • Save td-shi/500810ec21f8927e93a0916fd8cf6fc2 to your computer and use it in GitHub Desktop.
Save td-shi/500810ec21f8927e93a0916fd8cf6fc2 to your computer and use it in GitHub Desktop.
Replacing to a ASCII character.
#!/bin/bash --posix
# -*- coding:utf-8 -*-
# === Coding shell scripting Memo ==============================================
# ${<name>#<pattern>} :: matching delete with shortest by forword.
# ${<name>##<pattern>} :: matching delete with longest by forword.
# ${<name>%<pattern>} :: matching delete with shortest by backword.
# ${<name>%%<pattern>} :: mathing delete with longest by backword.
# ${<name>/<before>/<after>} :: replace only first matching.
# ${<name>//<before>/<after>} :: replace all matching.
# ${<name>:-<value>} :: if no yet set value, return value.
# ${<name>:=<value>} :: if no yet set value, return value and set.
# ". <shell script>" is to keep current shell and take over environment.
# === Initialize shell environment =============================================
#set -u # Just stop undefined values.
#set -e # Just stop error.
#set -x # Debug running command.
umask 0022
export LC_ALL=C
export LANG=C
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/bin:${PATH+:}${PATH-}"
type command >/dev/null 2>&1 && type getconf >/dev/null 2>&1 &&
export PATH="$(command -p getconf PATH):${PATH}"
export UNIX_STD=2003 # to make HP-UX conform to POSIX
# === Define the functions for printing usage and error message ================
usage_and_exit(){
cat <<-"USAGE" 1>&2
# About
Replacing to a ASCII character.
# Usage
## Command
rep2ascii.sh [option]
## Options
- -h |--help |--version
+ This help.
# Version
2021-07-31 0.01
# LICENSE
[CC0(Public domain)](https://creativecommons.org/publicdomain/zero/1.0/legalcode)
# Author
2021 TD
USAGE
exit 1
}
error_exit() {
${2+:} false && echo "${0##*/}: $2" 1>&2
exit "$1"
}
# === Initialize parameters ====================================================
SED_LF=$(printf '\\\n_')
SED_LF=${SED_LF%_}
IN_FILE=''
# === Confirm that the required commands exist =================================
# --- cURL or Wget (exsample)
#if type curl >/dev/null 2>&1; then
# CMD_CURL='curl'
#elif type wget >/dev/null 2>&1; then
# CMD_WGET='wget'
#else
# error_exit 1 'No HTTP-GET/POST command found.'
#fi
# === Print usage and exit if one of the help options is set ===================
case "$# ${1:-}" in
'1 -h'|'1 --help'|'1 --version') usage_and_exit;;
esac
# === Read options =============================================================
while :; do
case "${1:-}" in
--|-)
break
;;
--*|-*)
error_exit 1 'Invalid option'
;;
*)
break
;;
esac
done
# === Require parameters check =================================================
# === Last parameter ===========================================================
case $# in
0) : ;;
1) IN_FILE=$1 ;;
*) error_exit 1 'Too many args.' ;;
esac
if [ "_$IN_FILE" = '_' ] ||
[ "_$IN_FILE" = '_-' ] ||
[ "_$IN_FILE" = '_/dev/stdin' ] ||
[ "_$IN_FILE" = '_/dev/fd/0' ] ||
[ "_$IN_FILE" = '_/proc/self/fd/0' ] ; then
IN_FILE=''
elif [ -f "$IN_FILE" ] ||
[ -c "$IN_FILE" ] ||
[ -p "$IN_FILE" ] ; then
[ -r "$IN_FILE" ] || error_exit 1 'Cannot open the file: '"$IN_FILE"
else
usage_and_exit
fi
case "$IN_FILE" in ''|-|/*|./*|../*) :;; *) IN_FILE="./$IN_FILE";; esac
# === Define funcitons =========================================================
# === Main routine =============================================================
cat ${IN_FILE:+"$IN_FILE"} |\
sed "s/。/./g" |\
sed "s/、/,/g" |\
sed "s/,/,/g" |\
sed "s/././g" |\
sed "s/:/:/g" |\
sed "s/;/;/g" |\
sed "s/!/!/g" |\
sed "s/?/?/g" |\
sed "s/(/(/g" |\
sed "s/)/)/g" |\
sed "s/{/{/g" |\
sed "s/}/}/g" |\
sed "s/_/_/g" |\
sed "s/’/\'/g" |\
sed "s/‘/\'/g" |\
sed "s/’/\'/g" |\
sed 's/“/"/g' |\
sed 's/”/"/g' |\
sed "s/「/\'/g" |\
sed "s/」/\'/g" |\
sed "s/『/\"/g" |\
sed "s/』/\"/g" |\
sed "s/〔/[/g" |\
sed "s/〕/]/g" |\
sed "s/[/[/g" |\
sed "s/]/]/g" |\
sed "s/【/</g" |\
sed "s/】/>/g" |\
sed "s/〈/</g" |\
sed "s/〉/>/g" |\
sed "s/</</g" |\
sed "s/>/>/g" |\
sed "s/《/<</g" |\
sed "s/》/>>/g" |\
sed "s/~/~/g" |\
sed "s/―/-/g" |\
sed "s/ー/-/g" |\
sed "s/=/=/g" |\
sed "s/%/%/g" |\
sed "s/#/#/g" |\
sed "s/&/\&/g" |\
sed "s/*/*/g" |\
sed "s/@/@/g" |\
sed "s:/:/:g" |\
sed "s:\:\\\\:g" |\
sed "s:∥://:g" |\
sed "s/|/|/g" |\
sed "s/+/+/g" |\
sed "s/-/-/g" |\
sed "s/ / /g" |\
sed "s/ / /g" |\
sed "s/A/A/g" |\
sed "s/B/B/g" |\
sed "s/C/C/g" |\
sed "s/D/D/g" |\
sed "s/E/E/g" |\
sed "s/F/F/g" |\
sed "s/G/G/g" |\
sed "s/H/H/g" |\
sed "s/I/I/g" |\
sed "s/J/J/g" |\
sed "s/K/K/g" |\
sed "s/L/L/g" |\
sed "s/M/M/g" |\
sed "s/N/N/g" |\
sed "s/O/O/g" |\
sed "s/P/P/g" |\
sed "s/Q/Q/g" |\
sed "s/R/R/g" |\
sed "s/S/S/g" |\
sed "s/T/T/g" |\
sed "s/U/U/g" |\
sed "s/V/V/g" |\
sed "s/W/W/g" |\
sed "s/X/X/g" |\
sed "s/Y/Y/g" |\
sed "s/Z/Z/g" |\
sed "s/a/a/g" |\
sed "s/b/b/g" |\
sed "s/c/c/g" |\
sed "s/d/d/g" |\
sed "s/e/e/g" |\
sed "s/f/f/g" |\
sed "s/g/g/g" |\
sed "s/h/h/g" |\
sed "s/i/i/g" |\
sed "s/j/j/g" |\
sed "s/k/k/g" |\
sed "s/l/l/g" |\
sed "s/m/m/g" |\
sed "s/n/n/g" |\
sed "s/o/o/g" |\
sed "s/p/p/g" |\
sed "s/q/q/g" |\
sed "s/r/r/g" |\
sed "s/s/s/g" |\
sed "s/t/t/g" |\
sed "s/u/u/g" |\
sed "s/v/v/g" |\
sed "s/w/w/g" |\
sed "s/x/x/g" |\
sed "s/y/y/g" |\
sed "s/z/z/g" |\
sed "s/0/0/g" |\
sed "s/1/1/g" |\
sed "s/2/2/g" |\
sed "s/3/3/g" |\
sed "s/4/4/g" |\
sed "s/5/5/g" |\
sed "s/6/6/g" |\
sed "s/7/7/g" |\
sed "s/8/8/g" |\
sed "s/9/9/g" |\
sed "s/…/.../g" |\
sed "s/©/(C)/g" |\
sed "s/${SED_LF}${SED_LF}${SED_LF}*/${SED_LF}${SED_LF}/g"
# === End shell script =========================================================
exit 0
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment