Unix Shell

Updated: 21 April 2026

Searching

You can use grep to search in a file

Terminal window
1
grep "hello" ./hello.txt

This also works using a pipe:

Terminal window
1
cat hello.txt | grep hello

And it can take a regex using the -e flag:

Terminal window
1
cat hello.txt | grep -e `^hello`

grep can also be used to search recursively through a directory using the -R flag:

Terminal window
1
grep -R "hello" ./hello

And using a regex

Terminal window
1
grep -R ^hello

Or case inensitive with -i or for full words with -w

You can even search for something in the output of a command using a pipe (|)

Terminal window
1
echo "hello world" | grep "world"

Text Manipulation

Cutting Text

You can cut some text on a per-line basis using cut. You can view the help for cut using:

Terminal window
1
man cut

Cut has 3 main modes, namely:

-b which lets you specify a byte position or byte range to keep

Terminal window
1
cat file.txt | cut -b 3 # take the third byte of each line
2
cat file.txt | cut -b 3-5 # take bytes 3-5 of each line
3
cat file.txt | cut -b 3- # take bytes 3 to end of each line
4
5
cat file.txt | cut -b 1,5-7,9 # any mix of the above

-c which lets you specify a character position or character range to keep

Terminal window
1
cat file.txt | cut -c 3 # take the third character of each line
2
cat file.txt | cut -c 3-5 # take chars 1-5 of each line
3
cat file.txt | cut -c 3- # take char 3 to end of each line
4
5
cat file.txt | cut -c 1,5-7,9 # any mix of the above

-f which allows for splitting on a field name using -d as the delimiter (default delimiter is \t)

Terminal window
1
cat file.txt | cut -f 1 # take the first column of each line using the default delimter
2
3
cat file.txt | cut -d "," -f 1 # take the first column of each line
4
cat file.txt | cut -d "," -f 2-4 # take chars 1-5 of each line
5
cat file.txt | cut -d "," -f 2- # take char 3 to end of each line
6
7
cat file.txt | cut -d "," -f 1,5-7,9 # any mix of the above

Processes

List Processes

To kill a process you can first list running processes

Terminal window
1
lsof

To get the PID of a process you can use lsof along with grep, e.g. find a node process:

Terminal window
1
lsof | grep node

Find A Process on a Current Port

E.g for a processs running on port 4001

Terminal window
1
lsof -i:4001

You can also just get the port by adding -t:

Terminal window
1
lsof -t -t:4001

Kill a Process by PID

You can kill a process using it’s PID using:

Terminal window
1
kill 1234

Or with -9 to force

Terminal window
1
kill -9 1234

Kill a Process by Port

You can kill a process that’s listening on a port by first getting the PID of the process with lsof -t -i:<PORT NUMBER> and pass it into the kill command, e.g. for port 4000

Terminal window
1
kill $(lsof -t -i:4000)

Jobs/Background Processes

Start a process, e.g. ping

Terminal window
1
ping google.com

The use ctrl+z to suspend the task into the background

You can now use the terminal and start other jobs

Once jobs are running you can use jobs to view runnning jobs:

Terminal window
1
jobs
2
3
## which outputs
4
[1] suspended ping google.com
5
[2] - suspended ping other.com
6
[3] + suspended ping hello.com

Jobs can be resumed using fg for the most recent job, or fg %<JOB NUMBER> to resume a specific job

For example, resuming the ping hello.com can be done with:

Terminal window
1
fg %3

You can use cd to move to specific folders relatively

Terminal window
1
cd ../other-folder/my-folder

Or even from the user home directory by prefixing with ~

Terminal window
1
cd ~/my-stuff

And you can use - to just swap back to the last directory

Terminal window
1
## before, in apps/stuff, now in apps/something-else
2
cd -
3
## after, now in apps/something-else

Tail/Watch a file as it changes

You can get the tail of a file and watch it as it changes using:

Terminal window
1
tail -f ./path/to/file

Copy to Clipboard

To copy contents to the clipboard you can simlpy pipe it to pbcopy like so:

Terminal window
1
cat hello.txt | pbcopy