From 1e401948cc14e4004ebfb4453f405ff43dd9bd71 Mon Sep 17 00:00:00 2001 From: Rashaad Ebrahim Date: Tue, 4 Nov 2025 20:12:24 +0200 Subject: [PATCH 1/8] ls exercises complete --- individual-shell-tools/ls/script-01.sh | 1 + individual-shell-tools/ls/script-02.sh | 2 ++ individual-shell-tools/ls/script-03.sh | 1 + individual-shell-tools/ls/script-04.sh | 2 ++ 4 files changed, 6 insertions(+) diff --git a/individual-shell-tools/ls/script-01.sh b/individual-shell-tools/ls/script-01.sh index 241b62f5e..044af3619 100755 --- a/individual-shell-tools/ls/script-01.sh +++ b/individual-shell-tools/ls/script-01.sh @@ -12,4 +12,5 @@ if [[ "${script_dir}" != "$(pwd)" ]]; then fi # TODO: Write a command to list the files and folders in this directory. +ls # The output should be a list of names including child-directory, script-01.sh, script-02.sh, and more. diff --git a/individual-shell-tools/ls/script-02.sh b/individual-shell-tools/ls/script-02.sh index d0a5a10f4..cec24305d 100755 --- a/individual-shell-tools/ls/script-02.sh +++ b/individual-shell-tools/ls/script-02.sh @@ -3,4 +3,6 @@ set -euo pipefail # TODO: Write a command which lists all of the files in the directory named child-directory. +ls child-directory + # The output should be a list of names: helper-1.txt, helper-2.txt, helper-3.txt. diff --git a/individual-shell-tools/ls/script-03.sh b/individual-shell-tools/ls/script-03.sh index 781216d21..0dc1c2f8a 100755 --- a/individual-shell-tools/ls/script-03.sh +++ b/individual-shell-tools/ls/script-03.sh @@ -3,5 +3,6 @@ set -euo pipefail # TODO: Write a command which _recursively_ lists all of the files and folders in this directory _and_ all of the files inside those folders. +ls -R # The output should be a list of names including: child-directory, script-01.sh, helper-1.txt (and more). # The formatting of the output doesn't matter. diff --git a/individual-shell-tools/ls/script-04.sh b/individual-shell-tools/ls/script-04.sh index 72f3817b3..7c82c5d86 100755 --- a/individual-shell-tools/ls/script-04.sh +++ b/individual-shell-tools/ls/script-04.sh @@ -14,10 +14,12 @@ touch "${script_dir}/child-directory/helper-3.txt" echo "First exercise (sorted newest to oldest):" # TODO: Write a command which lists the files in the child-directory directory, one per line, sorted so that the most recently modified file is first. +ls -lt ./child-directory # The output should be a list of names in this order, one per line: helper-3.txt, helper-1.txt, helper-2.txt. echo "Second exercise (sorted oldest to newest):" # TODO: Write a command which does the same as above, but sorted in the opposite order (oldest first). +ls -ltr ./child-directory # The output should be a list of names in this order, one per line: helper-2.txt, helper-1.txt, helper-3.txt. From 6c213c55c9cc9f06115e34357016119cc7231e24 Mon Sep 17 00:00:00 2001 From: Rashaad Ebrahim Date: Tue, 4 Nov 2025 22:30:07 +0200 Subject: [PATCH 2/8] cat exercises complete --- individual-shell-tools/cat/script-01.sh | 1 + individual-shell-tools/cat/script-02.sh | 1 + individual-shell-tools/cat/script-03.sh | 1 + individual-shell-tools/cat/script-04-stretch.sh | 1 + 4 files changed, 4 insertions(+) diff --git a/individual-shell-tools/cat/script-01.sh b/individual-shell-tools/cat/script-01.sh index c85053e0f..682b379b6 100755 --- a/individual-shell-tools/cat/script-01.sh +++ b/individual-shell-tools/cat/script-01.sh @@ -3,4 +3,5 @@ set -euo pipefail # TODO: Write a command to output the contents of the helper-1.txt file inside the helper-files directory to the terminal. +cat ../helper-files/helper-1.txt # The output of this command should be "Once upon a time...". diff --git a/individual-shell-tools/cat/script-02.sh b/individual-shell-tools/cat/script-02.sh index 01bbd5eab..4806714bd 100755 --- a/individual-shell-tools/cat/script-02.sh +++ b/individual-shell-tools/cat/script-02.sh @@ -4,6 +4,7 @@ set -euo pipefail # TODO: Write a command to output the contents of all of the files inside the helper-files directory to the terminal. # Make sure you are only calling `cat` once. +cat ../helper-files/* # # The output of this command should be: # Once upon a time... diff --git a/individual-shell-tools/cat/script-03.sh b/individual-shell-tools/cat/script-03.sh index 37573b0c1..05957a5a4 100755 --- a/individual-shell-tools/cat/script-03.sh +++ b/individual-shell-tools/cat/script-03.sh @@ -3,6 +3,7 @@ set -euo pipefail # TODO: Write a command to output the contents of the file `helper-3.txt` inside the helper-files directory to the terminal. +cat -n ../helper-files/helper-3.txt # This time, we also want to see the line numbers in the output. # # The output of this command should be something like: diff --git a/individual-shell-tools/cat/script-04-stretch.sh b/individual-shell-tools/cat/script-04-stretch.sh index 00fe3c48b..a9c3f8752 100755 --- a/individual-shell-tools/cat/script-04-stretch.sh +++ b/individual-shell-tools/cat/script-04-stretch.sh @@ -6,6 +6,7 @@ set -euo pipefail # TODO: Write a command to output the contents of all of the files in the helper-files directory to the terminal. # We also want to see the line numbers in the output, but we want line numbers not to reset at the start of each file. +cat -n ../helper-files/helper* # # The output of this command should be something like: # 1 Once upon a time... From 79c371eeb10a6e7d2abf42f92e684865e6110a60 Mon Sep 17 00:00:00 2001 From: Rashaad Ebrahim Date: Wed, 5 Nov 2025 12:35:14 +0200 Subject: [PATCH 3/8] wc exercises complete --- individual-shell-tools/wc/script-01.sh | 1 + individual-shell-tools/wc/script-02.sh | 2 ++ individual-shell-tools/wc/script-03.sh | 1 + 3 files changed, 4 insertions(+) diff --git a/individual-shell-tools/wc/script-01.sh b/individual-shell-tools/wc/script-01.sh index c9dd6e5df..db1528e91 100755 --- a/individual-shell-tools/wc/script-01.sh +++ b/individual-shell-tools/wc/script-01.sh @@ -3,4 +3,5 @@ set -euo pipefail # TODO: Write a command to output the number of words in the file helper-files/helper-3.txt. +wc -w ../helper-files/helper-3.txt # The output should include the number 19. The output should not include the number 92. diff --git a/individual-shell-tools/wc/script-02.sh b/individual-shell-tools/wc/script-02.sh index 8feeb1a62..9c312f945 100755 --- a/individual-shell-tools/wc/script-02.sh +++ b/individual-shell-tools/wc/script-02.sh @@ -3,4 +3,6 @@ set -euo pipefail # TODO: Write a command to output the number of lines in the file helper-files/helper-3.txt. +wc -l ../helper-files/helper-3.txt + # The output should include the number 3. The output should not include the number 19. diff --git a/individual-shell-tools/wc/script-03.sh b/individual-shell-tools/wc/script-03.sh index 6b2e9d3d1..92bb0195e 100755 --- a/individual-shell-tools/wc/script-03.sh +++ b/individual-shell-tools/wc/script-03.sh @@ -3,6 +3,7 @@ set -euo pipefail # TODO: Write a command to output the number of lines, words, and characters in all of the files inside the helper-files directory. +wc ../helper-files/* # The output should be something like: # 1 4 20 ../helper-files/helper-1.txt # 1 7 39 ../helper-files/helper-2.txt From 5f214aa768f4ae8a352451d373a708fab842425e Mon Sep 17 00:00:00 2001 From: Rashaad Ebrahim Date: Wed, 5 Nov 2025 13:43:09 +0200 Subject: [PATCH 4/8] grep exercises complete --- individual-shell-tools/grep/script-01.sh | 2 ++ individual-shell-tools/grep/script-02.sh | 2 ++ individual-shell-tools/grep/script-03.sh | 1 + individual-shell-tools/grep/script-04.sh | 2 ++ individual-shell-tools/grep/script-05.sh | 2 ++ individual-shell-tools/grep/script-06.sh | 2 ++ individual-shell-tools/grep/script-07.sh | 2 ++ 7 files changed, 13 insertions(+) diff --git a/individual-shell-tools/grep/script-01.sh b/individual-shell-tools/grep/script-01.sh index fb05f42f2..dc743ba0b 100755 --- a/individual-shell-tools/grep/script-01.sh +++ b/individual-shell-tools/grep/script-01.sh @@ -3,4 +3,6 @@ set -euo pipefail # TODO: Write a command to output every line in dialogue.txt said by the Doctor. +grep "^Doctor\b" dialogue.txt + # The output should contain 6 lines. diff --git a/individual-shell-tools/grep/script-02.sh b/individual-shell-tools/grep/script-02.sh index df6f85640..eac953cf4 100755 --- a/individual-shell-tools/grep/script-02.sh +++ b/individual-shell-tools/grep/script-02.sh @@ -3,4 +3,6 @@ set -euo pipefail # TODO: Write a command to output every line in dialogue.txt that contains the word Doctor (regardless of case). +grep -i Doctor dialogue.txt + # The output should contain 9 lines. diff --git a/individual-shell-tools/grep/script-03.sh b/individual-shell-tools/grep/script-03.sh index 5383fe578..71f6d4d38 100755 --- a/individual-shell-tools/grep/script-03.sh +++ b/individual-shell-tools/grep/script-03.sh @@ -3,4 +3,5 @@ set -euo pipefail # TODO: Write a command to output the number of lines in dialogue.txt that contain the word Doctor (regardless of case). +grep -ic Doctor dialogue.txt # The output should be exactly the number 9. diff --git a/individual-shell-tools/grep/script-04.sh b/individual-shell-tools/grep/script-04.sh index 80ee04776..42365f384 100755 --- a/individual-shell-tools/grep/script-04.sh +++ b/individual-shell-tools/grep/script-04.sh @@ -3,4 +3,6 @@ set -euo pipefail # TODO: Write a command to output every line in dialogue.txt that does not contain the word "Hello" (regardless of case). +grep -icv Hello dialogue.txt + # The output should contain 10 lines. diff --git a/individual-shell-tools/grep/script-05.sh b/individual-shell-tools/grep/script-05.sh index 1eb538185..25ec33905 100755 --- a/individual-shell-tools/grep/script-05.sh +++ b/individual-shell-tools/grep/script-05.sh @@ -3,4 +3,6 @@ set -euo pipefail # TODO: Write a command to output every line in dialogue.txt that contains the string "cure", as well as the line before that line. +grep -iC 1 cure dialogue.txt + # The output should contain two pairs of two lines of text (with a separator between them). diff --git a/individual-shell-tools/grep/script-06.sh b/individual-shell-tools/grep/script-06.sh index 5670e3b6c..f31d66e4e 100755 --- a/individual-shell-tools/grep/script-06.sh +++ b/individual-shell-tools/grep/script-06.sh @@ -3,4 +3,6 @@ set -euo pipefail # TODO: Write a command to output the name of every `.txt` file in this directory which contains a line of dialogue said by the Doctor. +grep -l "^Doctor\b" *.txt + # The output should contain two filenames. diff --git a/individual-shell-tools/grep/script-07.sh b/individual-shell-tools/grep/script-07.sh index 9670ebad9..aec7b27a2 100755 --- a/individual-shell-tools/grep/script-07.sh +++ b/individual-shell-tools/grep/script-07.sh @@ -3,4 +3,6 @@ set -euo pipefail # TODO: Write a command to output, for each `.txt` file in this directory, how many lines of dialogue the Doctor has. +grep -c "^Doctor\b" *.txt + # The output should show that dialogue.txt contains 6 lines, dialogue-2.txt contains 2, and dialogue-3.txt contains 0. From c35ce920fe0f9260adf17a1115330d489578a225 Mon Sep 17 00:00:00 2001 From: Rashaad Ebrahim Date: Wed, 5 Nov 2025 15:49:27 +0200 Subject: [PATCH 5/8] sed exercises complete --- individual-shell-tools/sed/script-01.sh | 1 + individual-shell-tools/sed/script-02.sh | 2 ++ individual-shell-tools/sed/script-03.sh | 2 ++ individual-shell-tools/sed/script-04.sh | 1 + individual-shell-tools/sed/script-05.sh | 1 + individual-shell-tools/sed/script-06.sh | 2 ++ 6 files changed, 9 insertions(+) diff --git a/individual-shell-tools/sed/script-01.sh b/individual-shell-tools/sed/script-01.sh index 3eba6fa4d..6cb12d924 100755 --- a/individual-shell-tools/sed/script-01.sh +++ b/individual-shell-tools/sed/script-01.sh @@ -3,5 +3,6 @@ set -euo pipefail # TODO: Write a command to output input.txt with all occurrences of the letter `i` replaced with `I`. +sed "s/i/I/g" input.txt # The output should contain 11 lines. # The first line of the output should be: "ThIs Is a sample fIle for experImentIng with sed.". diff --git a/individual-shell-tools/sed/script-02.sh b/individual-shell-tools/sed/script-02.sh index abdd64d06..96228308e 100755 --- a/individual-shell-tools/sed/script-02.sh +++ b/individual-shell-tools/sed/script-02.sh @@ -3,5 +3,7 @@ set -euo pipefail # TODO: Write a command to output input.txt with numbers removed. +sed 's/[0-9]//g' input.txt + # The output should contain 11 lines. # Line 6 of the output should be " Alisha". diff --git a/individual-shell-tools/sed/script-03.sh b/individual-shell-tools/sed/script-03.sh index dd284a296..4d8e3dd9e 100755 --- a/individual-shell-tools/sed/script-03.sh +++ b/individual-shell-tools/sed/script-03.sh @@ -3,4 +3,6 @@ set -euo pipefail # TODO: Write a command to output input.txt removing any line which contains a number. +sed '/[0-9]/d' input.txt + # The output should contain 6 lines. diff --git a/individual-shell-tools/sed/script-04.sh b/individual-shell-tools/sed/script-04.sh index 0052ac6c4..fcac5ae0d 100755 --- a/individual-shell-tools/sed/script-04.sh +++ b/individual-shell-tools/sed/script-04.sh @@ -3,4 +3,5 @@ set -euo pipefail # TODO: Write a command to output input.txt replacing every occurrence of the string "We'll" with "We will". +sed "s/We'll/We will/g" input.txt # The output should contain 11 lines. diff --git a/individual-shell-tools/sed/script-05.sh b/individual-shell-tools/sed/script-05.sh index 2dcc91a0c..b710d689d 100755 --- a/individual-shell-tools/sed/script-05.sh +++ b/individual-shell-tools/sed/script-05.sh @@ -4,5 +4,6 @@ set -euo pipefail # TODO: Write a command to output input.txt with one change: # If a line starts with a number and a space, make the line instead end with a space and the number. +sed 's/^\([0-9]\+\) \(.*\)/\2 \1/' input.txt # So line 6 which currently reads "37 Alisha" should instead read "Alisha 37". # The output should contain 11 lines. diff --git a/individual-shell-tools/sed/script-06.sh b/individual-shell-tools/sed/script-06.sh index 0b9390170..2259183c2 100755 --- a/individual-shell-tools/sed/script-06.sh +++ b/individual-shell-tools/sed/script-06.sh @@ -3,6 +3,8 @@ set -euo pipefail # TODO: Write a command to output input.txt with one fix: +sed 's/,\([^ ]\)/, \1/g' input.txt + # If a comma in input.txt is not followed by a space, add a space after. # If there is already a space after a comma, do not add an additional space. # The output should contain 11 lines. From 323f520760c1664ef6353727674dbf6a6bb40f98 Mon Sep 17 00:00:00 2001 From: Rashaad Ebrahim Date: Wed, 5 Nov 2025 21:27:34 +0200 Subject: [PATCH 6/8] awk exercises complete --- individual-shell-tools/awk/script-01.sh | 2 ++ individual-shell-tools/awk/script-02.sh | 1 + individual-shell-tools/awk/script-03.sh | 2 ++ individual-shell-tools/awk/script-04.sh | 1 + individual-shell-tools/awk/script-05.sh | 1 + individual-shell-tools/awk/script-06-stretch.sh | 2 ++ individual-shell-tools/awk/script-07-stretch.sh | 7 +++++++ 7 files changed, 16 insertions(+) diff --git a/individual-shell-tools/awk/script-01.sh b/individual-shell-tools/awk/script-01.sh index 8db4390af..f99827a13 100755 --- a/individual-shell-tools/awk/script-01.sh +++ b/individual-shell-tools/awk/script-01.sh @@ -3,4 +3,6 @@ set -euo pipefail # TODO: Write a command to output just the names of each player in `scores-table.txt`. +awk '{ print $1}' scores-table.txt + # Your output should contain 6 lines, each with just one word on it. diff --git a/individual-shell-tools/awk/script-02.sh b/individual-shell-tools/awk/script-02.sh index 5956be9bd..494a8ee30 100755 --- a/individual-shell-tools/awk/script-02.sh +++ b/individual-shell-tools/awk/script-02.sh @@ -3,4 +3,5 @@ set -euo pipefail # TODO: Write a command to output the names of each player, as well as their city. +awk '{ print $1, $2}' scores-table.txt # Your output should contain 6 lines, each with two words on it, separated by a space. diff --git a/individual-shell-tools/awk/script-03.sh b/individual-shell-tools/awk/script-03.sh index af7c6e8b9..8e2add017 100755 --- a/individual-shell-tools/awk/script-03.sh +++ b/individual-shell-tools/awk/script-03.sh @@ -3,5 +3,7 @@ set -euo pipefail # TODO: Write a command to output just the names of each player along with the score from their first attempt. +awk '{ print $1, $3}' scores-table.txt + # Your output should contain 6 lines, each with one word and one number on it. # The first line should be "Ahmed 1". diff --git a/individual-shell-tools/awk/script-04.sh b/individual-shell-tools/awk/script-04.sh index bf15703c7..ddfe81f80 100755 --- a/individual-shell-tools/awk/script-04.sh +++ b/individual-shell-tools/awk/script-04.sh @@ -3,5 +3,6 @@ set -euo pipefail # TODO: Write a command to output just the names of each player in London along with the score from their last attempt. +awk '$2 == "London" {print $1, $NF}' scores.txt # Your output should contain 3 lines, each with one word and one number on it. # The first line should be "Ahmed 4". diff --git a/individual-shell-tools/awk/script-05.sh b/individual-shell-tools/awk/script-05.sh index d1680cb02..2abcf18ec 100755 --- a/individual-shell-tools/awk/script-05.sh +++ b/individual-shell-tools/awk/script-05.sh @@ -3,5 +3,6 @@ set -euo pipefail # TODO: Write a command to output just the names of each player along with the number of times they've played the game. +awk '{print $1, NF - 2}' scores-table.txt # Your output should contain 6 lines, each with one word and one number on it. # The first line should be "Ahmed 3". diff --git a/individual-shell-tools/awk/script-06-stretch.sh b/individual-shell-tools/awk/script-06-stretch.sh index 0201e6378..d3078c65e 100755 --- a/individual-shell-tools/awk/script-06-stretch.sh +++ b/individual-shell-tools/awk/script-06-stretch.sh @@ -5,4 +5,6 @@ set -euo pipefail # NOTE: This is a stretch exercise - it is optional. # TODO: Write a command to output the total of adding together all players' first scores. +awk '{if (NF > 2) sum += $3} END {print sum}' scores.txt + # Your output should be exactly the number 54. diff --git a/individual-shell-tools/awk/script-07-stretch.sh b/individual-shell-tools/awk/script-07-stretch.sh index 3f7155880..3f4154502 100755 --- a/individual-shell-tools/awk/script-07-stretch.sh +++ b/individual-shell-tools/awk/script-07-stretch.sh @@ -5,5 +5,12 @@ set -euo pipefail # NOTE: This is a stretch exercise - it is optional. # TODO: Write a command to output just the names of each player along with the total of adding all of that player's scores. + +awk '{ + total = 0; + for (i = 3; i <= NF; i++) total += $i; + print $1, total +}' scores-table.txt + # Your output should contain 6 lines, each with one word and one number on it. # The first line should be "Ahmed 15". The second line should be "Basia 37" From f02026efffed9a5415fd60dabf822067a05a5f64 Mon Sep 17 00:00:00 2001 From: Rashaad Ebrahim Date: Wed, 5 Nov 2025 21:29:28 +0200 Subject: [PATCH 7/8] awk exercises corrections --- individual-shell-tools/awk/script-04.sh | 2 +- individual-shell-tools/awk/script-06-stretch.sh | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/individual-shell-tools/awk/script-04.sh b/individual-shell-tools/awk/script-04.sh index ddfe81f80..fa77c70c1 100755 --- a/individual-shell-tools/awk/script-04.sh +++ b/individual-shell-tools/awk/script-04.sh @@ -3,6 +3,6 @@ set -euo pipefail # TODO: Write a command to output just the names of each player in London along with the score from their last attempt. -awk '$2 == "London" {print $1, $NF}' scores.txt +awk '$2 == "London" {print $1, $NF}' scores-table.txt # Your output should contain 3 lines, each with one word and one number on it. # The first line should be "Ahmed 4". diff --git a/individual-shell-tools/awk/script-06-stretch.sh b/individual-shell-tools/awk/script-06-stretch.sh index d3078c65e..232dd25af 100755 --- a/individual-shell-tools/awk/script-06-stretch.sh +++ b/individual-shell-tools/awk/script-06-stretch.sh @@ -5,6 +5,6 @@ set -euo pipefail # NOTE: This is a stretch exercise - it is optional. # TODO: Write a command to output the total of adding together all players' first scores. -awk '{if (NF > 2) sum += $3} END {print sum}' scores.txt +awk '{if (NF > 2) sum += $3} END {print sum}' scores-table.txt # Your output should be exactly the number 54. From 81e207251ddcfc0de5d5b93903b74863fb01d104 Mon Sep 17 00:00:00 2001 From: Rashaad Ebrahim Date: Wed, 19 Nov 2025 13:46:39 +0200 Subject: [PATCH 8/8] Updated grep script-05.sh --- individual-shell-tools/grep/script-05.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/individual-shell-tools/grep/script-05.sh b/individual-shell-tools/grep/script-05.sh index 25ec33905..1d620d664 100755 --- a/individual-shell-tools/grep/script-05.sh +++ b/individual-shell-tools/grep/script-05.sh @@ -3,6 +3,6 @@ set -euo pipefail # TODO: Write a command to output every line in dialogue.txt that contains the string "cure", as well as the line before that line. -grep -iC 1 cure dialogue.txt +grep -iB 1 cure dialogue.txt # The output should contain two pairs of two lines of text (with a separator between them).