Removing punctuations from file input or standard input

Just started learning Unix and received my first assignment recently. We haven't learned many commands and honestly, I'm stumped. I'd like to receive assistance/guidance/hints.

  1. The problem statement, all variables and given/known data:
    How do I write a shell script that takes in a file or stdin that removes all the punctuation from it?

The shell script should be called from two ways:

  • removePunc FILENAME, where it reads a file in called FILENAME
  • removePunc, where it reads in standard input

For example, if the input is:

"Hello", she said. "Nice to meet you!", he {thought aloud}.

Then the output should be:

Hello she said Nice to meet you he thought aloud

The script must also accept one option, -r chars, where chars specifies characters to be removed from input. These characters are to be removed instead of the standard punctuation characters mentioned earlier.

  1. Relevant commands, code, scripts, algorithms:

  2. The attempts at a solution (include all code and scripts):

I really don't know where to begin, but I have a few concepts in mind. Can it be done by using sed or tr with a

while read line loop
  1. Complete Name of School (University), City (State), Country, Name of Professor, and Course Number (Link to Course):

Adelaide University, Adelaide SA, Australia, David Knight, CS2005

Regards.

Note: Without school/professor/course information, you will be banned if you post here! You must complete the entire template (not just parts of it).

Research regular expressions.
The following are some of the special groups that can be specified:
[:alnum:] - Alphanumeric characters.
[:alpha:] - Alphabetic characters
[:blank:] - Blank characters: space and tab.
[:digit:] - Digits: '0 1 2 3 4 5 6 7 8 9'.
[:lower:] - Lower-case letters: 'a b c d e f g h i j k l m n o p q r s t u v w x y z'.
[:space:] - Space characters: tab, newline, vertical tab, form feed, carriage return, and space.
[:upper:] - Upper-case letters: 'A B C D E F G H I J K L M N O P Q R S T U V W X Y Z'.

Hmm, so [: punct:] would be a good place to start with?

In principle: yes, but as you want to implement the "-r" option you need to break down this class to its member characters anyway.

You might want to start with the following thought: how does a script receive input? There are two ways: via <stdin> and via a file it reads from. If you use:

yourscript -f /path/to/file

The script is supposed to open that file and get its input by reading from it. If - in opposition to that - you use

cat /path/to/file | yourscript

or

yourscript < /path/to/file

The script gets its input by reading from <stdin>. You should start by researching and understanding how a script gathers input in these two ways prior to changing this input.

I hope this helps.

bakunin

I see. I was thinking of using an if else statement to check whether if there is an argument for the command or not. If there is an argument, then the command would use that argument, which is the file input. If there is none, then it is through standard input.

Is this fine?

Regards.