Introduction to Bash, VIM & Regex

Brought by: Frontend Masters

Overview

In this course James Halliday (Substack), author with more than 750 packages at npm, walks you through an illuminating guide to everything Unix! You'll learn how to take control of the Unix command line to write your own tools, automate tasks with shell scripts and the pipeline, compose regular expressions to master search patterns, and easily edit files with the popular Vim editor.

Syllabus

  • Introducing UNIX
  • Introducing the Unix Shell
  • Using Shell
  • Introducting Aliases
  • Special Directories
  • Combining and Copying Files
  • Moving Files and Creating Directories
  • Commands to Help Reduce Repetitive Typing
  • Deleting Files and Counting Words
  • Documentation and Options
  • Paths
  • Writing and Reading Files
  • Pipes
  • Curl, Grep, and Pipeline
  • head and tail commands
  • Calendar and Dates
  • Shorten Lines
  • More Curl and Grep
  • Backticks and Arithmetic
  • Q&A: Watch and Weather
  • Environment Variables
  • Quotes
  • Introducing Scripts
  • Read, Loops and While
  • $PATH
  • Permissions
  • Exit Codes, Operators, and Subshells
  • Job Control
  • Screen
  • Introducing Regular Expressions
  • Regular Expressions in JavaScript
  • Flags, Metacharacters, and Quantifiers
  • Character Class Ranges
  • Anchors, Groups, and sed
  • QA: Regular Expressions Reference
  • Wrapping Up Regular Expressions
  • Introducing Vim
  • Using Vim
  • Modes and Moving Around
  • Deleting and Searching
  • Search and Replace
  • Visual Select
  • Paste Buffer and Insert Modes
  • Wrapping up Vim

Taught by

James Halliday

Introduction to Bash, VIM & Regex
Go to course

Introduction to Bash, VIM & Regex

Brought by: Frontend Masters

  • Frontend Masters
  • Paid
  • English
  • Certificate Not Available
  • Available at any time
  • All
  • N/A
8.1.2PHP Version929msRequest Duration2MBMemory UsageGET en/courses/{slug}Route
    • Booting (611ms)
    • Application (316ms)
    • 1 x Booting (65.73%)
      610.51ms
      1 x Application (34.06%)
      316.38ms
      14 templates were rendered
      • public.courses.show (resources/views/public/courses/show.blade.php)3bladefile
        Params
        0
        course
        1
        links
        2
        config
      • public.courses.partials.breadcrumbs (resources/views/public/courses/partials/breadcrumbs.blade.php)6bladefile
        Params
        0
        __env
        1
        app
        2
        errors
        3
        course
        4
        links
        5
        config
      • public.courses.partials.heading (resources/views/public/courses/partials/heading.blade.php)7bladefile
        Params
        0
        __env
        1
        app
        2
        errors
        3
        course
        4
        links
        5
        config
        6
        classes
      • public.courses.partials.details (resources/views/public/courses/partials/details.blade.php)6bladefile
        Params
        0
        __env
        1
        app
        2
        errors
        3
        course
        4
        links
        5
        config
      • public.courses.partials.breadcrumbs (resources/views/public/courses/partials/breadcrumbs.blade.php)6bladefile
        Params
        0
        __env
        1
        app
        2
        errors
        3
        course
        4
        links
        5
        config
      • public.courses.partials.heading (resources/views/public/courses/partials/heading.blade.php)7bladefile
        Params
        0
        __env
        1
        app
        2
        errors
        3
        course
        4
        links
        5
        config
        6
        classes
      • public.layouts.main (resources/views/public/layouts/main.blade.php)6bladefile
        Params
        0
        __env
        1
        app
        2
        errors
        3
        course
        4
        links
        5
        config
      • public.layouts.partials.meta (resources/views/public/layouts/partials/meta.blade.php)6bladefile
        Params
        0
        __env
        1
        app
        2
        errors
        3
        course
        4
        links
        5
        config
      • public.layouts.partials.navbar (resources/views/public/layouts/partials/navbar.blade.php)6bladefile
        Params
        0
        __env
        1
        app
        2
        errors
        3
        course
        4
        links
        5
        config
      • public.auth.profile.partials.links (resources/views/public/auth/profile/partials/links.blade.php)6bladefile
        Params
        0
        __env
        1
        app
        2
        errors
        3
        course
        4
        links
        5
        config
      • public.auth.profile.partials.link (resources/views/public/auth/profile/partials/link.blade.php)8bladefile
        Params
        0
        __env
        1
        app
        2
        errors
        3
        course
        4
        links
        5
        config
        6
        route
        7
        title
      • public.auth.profile.partials.link (resources/views/public/auth/profile/partials/link.blade.php)8bladefile
        Params
        0
        __env
        1
        app
        2
        errors
        3
        course
        4
        links
        5
        config
        6
        route
        7
        title
      • public.auth.profile.partials.link (resources/views/public/auth/profile/partials/link.blade.php)8bladefile
        Params
        0
        __env
        1
        app
        2
        errors
        3
        course
        4
        links
        5
        config
        6
        route
        7
        title
      • public.layouts.partials.flash-session (resources/views/public/layouts/partials/flash-session.blade.php)6bladefile
        Params
        0
        __env
        1
        app
        2
        errors
        3
        course
        4
        links
        5
        config
      uri
      GET en/courses/{slug}
      middleware
      web, localize:en
      controller
      App\Http\Controllers\CourseController@show
      as
      en.courses.show
      namespace
      prefix
      /en
      where
      file
      app/Http/Controllers/CourseController.php:17-35
      6 statements were executed12.81ms
      • select * from `courses` where `slug_en` = 'introduction-to-bash,-vim-&-regex' limit 1
        10.89ms/app/Http/Controllers/CourseController.php:20corspedia
        Metadata
        Bindings
        • 0. introduction-to-bash,-vim-&-regex
        Backtrace
        • 17. /app/Http/Controllers/CourseController.php:20
        • 18. /vendor/laravel/framework/src/Illuminate/Routing/Controller.php:54
        • 19. /vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php:43
        • 20. /vendor/laravel/framework/src/Illuminate/Routing/Route.php:260
        • 21. /vendor/laravel/framework/src/Illuminate/Routing/Route.php:205
      • update `courses` set `visitors` = `visitors` + 1, `courses`.`updated_at` = '2025-07-11 17:28:53' where `id` = 2148
        940μs/app/Http/Controllers/CourseController.php:21corspedia
        Metadata
        Bindings
        • 0. 2025-07-11 17:28:53
        • 1. 2148
        Backtrace
        • 17. /app/Http/Controllers/CourseController.php:21
        • 18. /vendor/laravel/framework/src/Illuminate/Routing/Controller.php:54
        • 19. /vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php:43
        • 20. /vendor/laravel/framework/src/Illuminate/Routing/Route.php:260
        • 21. /vendor/laravel/framework/src/Illuminate/Routing/Route.php:205
      • select `id`, `name_en`, `name_ar`, `topic_id`, `slug_en`, `slug_ar` from `subjects` where `subjects`.`id` in (44)
        240μs/app/Http/Controllers/CourseController.php:23corspedia
        Metadata
        Backtrace
        • 20. /app/Http/Controllers/CourseController.php:23
        • 21. /vendor/laravel/framework/src/Illuminate/Routing/Controller.php:54
        • 22. /vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php:43
        • 23. /vendor/laravel/framework/src/Illuminate/Routing/Route.php:260
        • 24. /vendor/laravel/framework/src/Illuminate/Routing/Route.php:205
      • select `id`, `name_en`, `name_ar`, `slug_en`, `slug_ar` from `topics` where `topics`.`id` in (1)
        210μs/app/Http/Controllers/CourseController.php:23corspedia
        Metadata
        Backtrace
        • 25. /app/Http/Controllers/CourseController.php:23
        • 26. /vendor/laravel/framework/src/Illuminate/Routing/Controller.php:54
        • 27. /vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php:43
        • 28. /vendor/laravel/framework/src/Illuminate/Routing/Route.php:260
        • 29. /vendor/laravel/framework/src/Illuminate/Routing/Route.php:205
      • select * from `providers` where `providers`.`id` in (41) and `providers`.`deleted_at` is null
        250μs/app/Http/Controllers/CourseController.php:23corspedia
        Metadata
        Backtrace
        • 20. /app/Http/Controllers/CourseController.php:23
        • 21. /vendor/laravel/framework/src/Illuminate/Routing/Controller.php:54
        • 22. /vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php:43
        • 23. /vendor/laravel/framework/src/Illuminate/Routing/Route.php:260
        • 24. /vendor/laravel/framework/src/Illuminate/Routing/Route.php:205
      • select * from `html_files` where `html_files`.`id` = 2139 limit 1
        280μs/app/Models/Course.php:84corspedia
        Metadata
        Bindings
        • 0. 2139
        Backtrace
        • 21. /app/Models/Course.php:84
        • 28. view::public.courses.show:29
        • 30. /vendor/laravel/framework/src/Illuminate/Filesystem/Filesystem.php:125
        • 31. /vendor/laravel/framework/src/Illuminate/View/Engines/PhpEngine.php:58
        • 32. /vendor/laravel/framework/src/Illuminate/View/Engines/CompilerEngine.php:72
      App\Models\HtmlFile
      1
      App\Models\Provider
      1
      App\Models\Topic
      1
      App\Models\Subject
      1
      App\Models\Course
      1
        _token
        y2F6Bz0fDS8a0eovXgdXCRtLbOzxGRmCdWoPRvlR
        locale
        en
        _previous
        array:1 [ "url" => "https://www.corspedia.com/en/courses/introduction-to-bash,-vim-&-regex" ]
        _flash
        array:2 [ "old" => [] "new" => [] ]
        PHPDEBUGBAR_STACK_DATA
        []
        path_info
        /en/courses/introduction-to-bash,-vim-&-regex
        status_code
        200
        
        status_text
        OK
        format
        html
        content_type
        text/html; charset=UTF-8
        request_query
        []
        
        request_request
        []
        
        request_headers
        0 of 0
        array:24 [ "cf-ipcountry" => array:1 [ 0 => "US" ] "cf-connecting-ip" => array:1 [ 0 => "216.73.216.113" ] "cdn-loop" => array:1 [ 0 => "cloudflare; loops=1" ] "x-forwarded-proto" => array:1 [ 0 => "https" ] "x-forwarded-for" => array:1 [ 0 => "216.73.216.113" ] "sec-fetch-site" => array:1 [ 0 => "none" ] "accept" => array:1 [ 0 => "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7" ] "user-agent" => array:1 [ 0 => "Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; ClaudeBot/1.0; +claudebot@anthropic.com)" ] "upgrade-insecure-requests" => array:1 [ 0 => "1" ] "sec-ch-ua-platform" => array:1 [ 0 => ""Windows"" ] "sec-ch-ua-mobile" => array:1 [ 0 => "?0" ] "sec-ch-ua" => array:1 [ 0 => ""Chromium";v="130", "HeadlessChrome";v="130", "Not?A_Brand";v="99"" ] "cache-control" => array:1 [ 0 => "no-cache" ] "pragma" => array:1 [ 0 => "no-cache" ] "sec-fetch-dest" => array:1 [ 0 => "document" ] "cf-ray" => array:1 [ 0 => "95da05105de539e4-YYZ" ] "accept-encoding" => array:1 [ 0 => "gzip, br" ] "priority" => array:1 [ 0 => "u=0, i" ] "sec-fetch-user" => array:1 [ 0 => "?1" ] "sec-fetch-mode" => array:1 [ 0 => "navigate" ] "cf-visitor" => array:1 [ 0 => "{"scheme":"https"}" ] "host" => array:1 [ 0 => "www.corspedia.com" ] "content-length" => array:1 [ 0 => "" ] "content-type" => array:1 [ 0 => "" ] ]
        request_server
        0 of 0
        array:50 [ "USER" => "www-data" "HOME" => "/var/www" "HTTP_CF_IPCOUNTRY" => "US" "HTTP_CF_CONNECTING_IP" => "216.73.216.113" "HTTP_CDN_LOOP" => "cloudflare; loops=1" "HTTP_X_FORWARDED_PROTO" => "https" "HTTP_X_FORWARDED_FOR" => "216.73.216.113" "HTTP_SEC_FETCH_SITE" => "none" "HTTP_ACCEPT" => "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7" "HTTP_USER_AGENT" => "Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; ClaudeBot/1.0; +claudebot@anthropic.com)" "HTTP_UPGRADE_INSECURE_REQUESTS" => "1" "HTTP_SEC_CH_UA_PLATFORM" => ""Windows"" "HTTP_SEC_CH_UA_MOBILE" => "?0" "HTTP_SEC_CH_UA" => ""Chromium";v="130", "HeadlessChrome";v="130", "Not?A_Brand";v="99"" "HTTP_CACHE_CONTROL" => "no-cache" "HTTP_PRAGMA" => "no-cache" "HTTP_SEC_FETCH_DEST" => "document" "HTTP_CF_RAY" => "95da05105de539e4-YYZ" "HTTP_ACCEPT_ENCODING" => "gzip, br" "HTTP_PRIORITY" => "u=0, i" "HTTP_SEC_FETCH_USER" => "?1" "HTTP_SEC_FETCH_MODE" => "navigate" "HTTP_CF_VISITOR" => "{"scheme":"https"}" "HTTP_HOST" => "www.corspedia.com" "REDIRECT_STATUS" => "200" "SERVER_NAME" => "corspedia.com" "SERVER_PORT" => "443" "SERVER_ADDR" => "141.95.147.152" "REMOTE_USER" => "" "REMOTE_PORT" => "44570" "REMOTE_ADDR" => "172.69.214.89" "SERVER_SOFTWARE" => "nginx/1.18.0" "GATEWAY_INTERFACE" => "CGI/1.1" "HTTPS" => "on" "REQUEST_SCHEME" => "https" "SERVER_PROTOCOL" => "HTTP/2.0" "DOCUMENT_ROOT" => "/var/www/corspedia/public" "DOCUMENT_URI" => "/index.php" "REQUEST_URI" => "/en/courses/introduction-to-bash,-vim-&-regex" "SCRIPT_NAME" => "/index.php" "CONTENT_LENGTH" => "" "CONTENT_TYPE" => "" "REQUEST_METHOD" => "GET" "QUERY_STRING" => "" "SCRIPT_FILENAME" => "/var/www/corspedia/public/index.php" "PATH_INFO" => "" "FCGI_ROLE" => "RESPONDER" "PHP_SELF" => "/index.php" "REQUEST_TIME_FLOAT" => 1752254932.8036 "REQUEST_TIME" => 1752254932 ]
        request_cookies
        []
        
        response_headers
        0 of 0
        array:5 [ "content-type" => array:1 [ 0 => "text/html; charset=UTF-8" ] "cache-control" => array:1 [ 0 => "no-cache, private" ] "date" => array:1 [ 0 => "Fri, 11 Jul 2025 17:28:53 GMT" ] "set-cookie" => array:2 [ 0 => "XSRF-TOKEN=eyJpdiI6IlhnVC9GVlRuQmYvc25xK1hFdXc4Mnc9PSIsInZhbHVlIjoiYjd4YkRyUVNzUXFXMzlZNUJobVQ3TEpIMWIxTVFCL1dsUjdHdXp2RVZsMGFuOG4rdFNFdExMOFd1MjZFQXlwV2xZSkZGTVYxZkhaSG9lMnlEb2xad3FaQXBuM3lidmF5S1hlUkU0MGZOYk03cXVxY3VxVjNCZ3FvTVY5QlJvcnciLCJtYWMiOiJmMDVhMjk3MjA0NzkyYzQxY2RjMTE5MGI4MjEyNmI0OWQ0ZTFjNjQ0NjA0YjgwNjQwZDdiNGEwMDQ4ZGQ4MjUwIiwidGFnIjoiIn0%3D; expires=Fri, 11 Jul 2025 19:28:53 GMT; Max-Age=7200; path=/; samesite=laxXSRF-TOKEN=eyJpdiI6IlhnVC9GVlRuQmYvc25xK1hFdXc4Mnc9PSIsInZhbHVlIjoiYjd4YkRyUVNzUXFXMzlZNUJobVQ3TEpIMWIxTVFCL1dsUjdHdXp2RVZsMGFuOG4rdFNFdExMOFd1MjZFQXlwV2xZSkZGT" 1 => "laravel_session=eyJpdiI6Ik8yUlJCMUpTMHVEa1ZGcGZyVWlhcHc9PSIsInZhbHVlIjoiUTk0QjlxR1lENjdFTHhCbUx4NHdTQVpSZTdaeU1vR0F1aDJVT1hjV0hnVmVkUnAvc2l5dzNOdkR5UE9sbU1jYVhGajVnaHZyNTJ1UlB6aEtidVJFdUZWSzU3b1o5NFpUUzIvZVBnUm9DeXFPZlA3ZWoyL0pPVVlHOFM1VHg5MFgiLCJtYWMiOiJmZWU4YWIzOGFhNmViOTJlYTg5Njc4MDNjMmIwMzRlNGUyOTMwNjQ3YjZkMzRmZWE0NjcxYWYyYjg1Mzc1ZjQ4IiwidGFnIjoiIn0%3D; expires=Fri, 11 Jul 2025 19:28:53 GMT; Max-Age=7200; path=/; httponly; samesite=laxlaravel_session=eyJpdiI6Ik8yUlJCMUpTMHVEa1ZGcGZyVWlhcHc9PSIsInZhbHVlIjoiUTk0QjlxR1lENjdFTHhCbUx4NHdTQVpSZTdaeU1vR0F1aDJVT1hjV0hnVmVkUnAvc2l5dzNOdkR5UE9sbU1jYVhG" ] "Set-Cookie" => array:2 [ 0 => "XSRF-TOKEN=eyJpdiI6IlhnVC9GVlRuQmYvc25xK1hFdXc4Mnc9PSIsInZhbHVlIjoiYjd4YkRyUVNzUXFXMzlZNUJobVQ3TEpIMWIxTVFCL1dsUjdHdXp2RVZsMGFuOG4rdFNFdExMOFd1MjZFQXlwV2xZSkZGTVYxZkhaSG9lMnlEb2xad3FaQXBuM3lidmF5S1hlUkU0MGZOYk03cXVxY3VxVjNCZ3FvTVY5QlJvcnciLCJtYWMiOiJmMDVhMjk3MjA0NzkyYzQxY2RjMTE5MGI4MjEyNmI0OWQ0ZTFjNjQ0NjA0YjgwNjQwZDdiNGEwMDQ4ZGQ4MjUwIiwidGFnIjoiIn0%3D; expires=Fri, 11-Jul-2025 19:28:53 GMT; path=/XSRF-TOKEN=eyJpdiI6IlhnVC9GVlRuQmYvc25xK1hFdXc4Mnc9PSIsInZhbHVlIjoiYjd4YkRyUVNzUXFXMzlZNUJobVQ3TEpIMWIxTVFCL1dsUjdHdXp2RVZsMGFuOG4rdFNFdExMOFd1MjZFQXlwV2xZSkZGT" 1 => "laravel_session=eyJpdiI6Ik8yUlJCMUpTMHVEa1ZGcGZyVWlhcHc9PSIsInZhbHVlIjoiUTk0QjlxR1lENjdFTHhCbUx4NHdTQVpSZTdaeU1vR0F1aDJVT1hjV0hnVmVkUnAvc2l5dzNOdkR5UE9sbU1jYVhGajVnaHZyNTJ1UlB6aEtidVJFdUZWSzU3b1o5NFpUUzIvZVBnUm9DeXFPZlA3ZWoyL0pPVVlHOFM1VHg5MFgiLCJtYWMiOiJmZWU4YWIzOGFhNmViOTJlYTg5Njc4MDNjMmIwMzRlNGUyOTMwNjQ3YjZkMzRmZWE0NjcxYWYyYjg1Mzc1ZjQ4IiwidGFnIjoiIn0%3D; expires=Fri, 11-Jul-2025 19:28:53 GMT; path=/; httponlylaravel_session=eyJpdiI6Ik8yUlJCMUpTMHVEa1ZGcGZyVWlhcHc9PSIsInZhbHVlIjoiUTk0QjlxR1lENjdFTHhCbUx4NHdTQVpSZTdaeU1vR0F1aDJVT1hjV0hnVmVkUnAvc2l5dzNOdkR5UE9sbU1jYVhG" ] ]
        session_attributes
        0 of 0
        array:5 [ "_token" => "y2F6Bz0fDS8a0eovXgdXCRtLbOzxGRmCdWoPRvlR" "locale" => "en" "_previous" => array:1 [ "url" => "https://www.corspedia.com/en/courses/introduction-to-bash,-vim-&-regex" ] "_flash" => array:2 [ "old" => [] "new" => [] ] "PHPDEBUGBAR_STACK_DATA" => [] ]