Added SED and AWK Sheets.
This commit is contained in:
parent
14dd29920f
commit
6109ca4e51
272
LEMP.md
272
LEMP.md
|
|
@ -1,272 +0,0 @@
|
|||
# Fedora Super-LEMP setup:
|
||||
|
||||
*Based on https://www.howtoforge.com/how-to-install-nginx-with-php-and-mariadb-lemp-stack-on-fedora-32/*
|
||||
|
||||
## Install packages
|
||||
|
||||
### Massive swiss-army knife setup
|
||||
```
|
||||
dnf install certbot certbot-nginx cockpit htop iftop iptraf nano openssh-server net-tools nginx* rsync screen vim wget && dnf groupinstall "Development Tools" "Web Server" "Mysql" "php"
|
||||
```
|
||||
### Or Less Extra
|
||||
|
||||
`dnf install certbot certbot-nginx nginx `
|
||||
|
||||
`dnf install vim nano rsync screen vim wget net-tools htop iftop iptraf openssh-server bash-completion`
|
||||
|
||||
`dnf groupinstall "Development Tools" "Web Server" "Mysql" "php"`
|
||||
|
||||
|
||||
### More butter Rocky variant
|
||||
|
||||
`dnf install epel-release`
|
||||
|
||||
`dnf install git vim nano rsync screen vim wget net-tools htop iftop iptraf openssh-server bash-completion mariadb mariadb-server certbot python3-certbot-nginx nginx php-fpm`
|
||||
|
||||
`dnf groupinstall "Development Tools"`
|
||||
|
||||
## Add non-root administrator
|
||||
|
||||
`adduser user`
|
||||
|
||||
`usermod -aG wheel user`
|
||||
|
||||
`passwd user`
|
||||
|
||||
`vi /etc/sudoers`
|
||||
|
||||
`sudo -i -u user`
|
||||
|
||||
## Configure SSH
|
||||
|
||||
`ssh-keygen -t rsa -b 4096`
|
||||
|
||||
### Change port and root login settings
|
||||
|
||||
`vi /etc/ssh/sshd_config`
|
||||
|
||||
### Add keys ( also see `ssh-copy-id` )
|
||||
|
||||
`vi .ssh/authorized_keys`
|
||||
|
||||
## Firewall settings
|
||||
|
||||
```
|
||||
systemctl enable firewalld
|
||||
systemctl start firewalld
|
||||
systemctl stop firewalld
|
||||
systemctl restart firewalld
|
||||
firewall-cmd --state
|
||||
firewall-cmd --set-default-zone=public
|
||||
firewall-cmd --zone=public --permanent --list-services
|
||||
firewall-cmd --zone=public --permanent --add-service=http
|
||||
firewall-cmd --zone=public --permanent --add-service=https
|
||||
firewall-cmd --add-port 20022/tcp
|
||||
firewall-cmd --permanent --add-port 20022/tcp
|
||||
firewall-cmd --permanent --add-port YOUR_PORT_HERE/tcp
|
||||
firewall-cmd --remove-service ssh --permanent
|
||||
firewall-cmd --reload
|
||||
systemctl reload firewalld
|
||||
|
||||
```
|
||||
|
||||
## MariaDB
|
||||
```
|
||||
systemctl enable mariadb
|
||||
systemctl start mariadb
|
||||
mysql_secure_installation # Y-N-Y-Y-Y-Y
|
||||
mysql -u root -p
|
||||
CREATE USER 'user1'@localhost IDENTIFIED BY 'password1';
|
||||
CREATE USER 'namenode'@localhost IDENTIFIED BY ':passwd';
|
||||
GRANT ALL PRIVILEGES ON *.* TO 'user1'@localhost IDENTIFIED BY 'password1';
|
||||
GRANT ALL PRIVILEGES ON *.* TO 'user2'@localhost IDENTIFIED BY 'passwd2';
|
||||
FLUSH PRIVILEGES;
|
||||
SHOW GRANTS FOR 'user1'@localhost;
|
||||
SHOW GRANTS FOR 'user2'@localhost;
|
||||
CREATE DATABASE 'yourDB';
|
||||
SHOW DATABASES;
|
||||
DROP USER 'user1'@localhost; # Just for example to show how to delete a user
|
||||
```
|
||||
|
||||
## Redis Setup
|
||||
|
||||
`dnf install redis php-redis`
|
||||
|
||||
`sudo systemctl enable --now redis`
|
||||
|
||||
`vi /etc/redis/redis.conf`
|
||||
|
||||
Change bind (0.0.0.0), `requirepass`, `port (2*)`, `maxmemory` (256mb), and `maxmemory-policy allkeys-lru`.
|
||||
|
||||
`systemctl restart redis`
|
||||
|
||||
```
|
||||
firewall-cmd --zone=public --permanent --add-port=26379/tcp
|
||||
firewall-cmd --reload
|
||||
```
|
||||
|
||||
## NGINX
|
||||
|
||||
### Important working directories:
|
||||
```
|
||||
/usr/share/nginx/
|
||||
|
||||
/etc/nginx/
|
||||
|
||||
```
|
||||
### Create user working directory for custom configuration files:
|
||||
```
|
||||
mkdir /etc/nginx/sites-available # Create a directory for nginx.conf files
|
||||
|
||||
mkdir /usr/share/nginx/example.com/html -p # Create new webroot with specified structure
|
||||
```
|
||||
|
||||
### Now we can create a new config file to start with:
|
||||
|
||||
`vi /etc/nginx/sites-available/example.com.conf`
|
||||
|
||||
|
||||
### Link it to active conf directory
|
||||
|
||||
`ln -s /etc/nginx/sites-available/example.com.conf /etc/nginx/conf.d/`
|
||||
|
||||
### If it is required at some point, removing that symlink is as easy as:
|
||||
|
||||
`rm /etc/nginx/conf.d/example.com.conf`
|
||||
|
||||
|
||||
### Now we edit the nginx.conf
|
||||
|
||||
`vi /etc/nginx/nginx.conf`
|
||||
|
||||
|
||||
### Set the following lines after the line "include /etc/nginx/conf.d/*.conf" (if not already set):
|
||||
```
|
||||
server_names_hash_bucket_size 64; # Should already exist in recent versions
|
||||
|
||||
types_hash_max_size 4096; ## Should already be set
|
||||
|
||||
```
|
||||
### Comment out the root location directive (Can uncomment after setup so as not to confuse cache while testing?)
|
||||
|
||||
**To test and reload the configuration:**
|
||||
|
||||
`nginx -t`
|
||||
`systemctl reload nginx`
|
||||
|
||||
### Simple recap moving forward:
|
||||
```
|
||||
systemctl start nginx
|
||||
systemctl restart nginx
|
||||
systemctl enable nginx
|
||||
systemctl status nginx
|
||||
systemctl reload nginx
|
||||
nginx -t
|
||||
mkdir /etc/nginx/sites-available
|
||||
mkdir /usr/share/nginx/example.com/html -p
|
||||
vi /etc/nginx/sites-available/example.com.conf
|
||||
ln -s /etc/nginx/sites-available/example.com.conf /etc/nginx/conf.d/
|
||||
vi /etc/nginx/nginx.com # comment out the root in default server block (troubleshooting)
|
||||
systemctl reload nginx
|
||||
```
|
||||
|
||||
## PHP-FPM setup
|
||||
|
||||
### Change user in configuration (nginx):
|
||||
|
||||
`vi /etc/php-fpm.d/www.conf`
|
||||
|
||||
`systemctl enable php-fpm`
|
||||
|
||||
`systemctl restart php-fpm`
|
||||
|
||||
### PHP-OPCache setup
|
||||
|
||||
`vi /etc/php.d/10-opcache.ini`
|
||||
|
||||
```
|
||||
opcache.enable_cli=1
|
||||
opcache.memory_consumption=128
|
||||
opcache.interned_strings_buffer=8
|
||||
opcache.max_accelerated_files=4000
|
||||
opcache.revalidate_freq=60
|
||||
```
|
||||
|
||||
`systemctl restart php-fpm`
|
||||
|
||||
`systemctl reload nginx`
|
||||
|
||||
### phpMyAdmin setup
|
||||
|
||||
`dnf install phpmyadmin `
|
||||
|
||||
`ln -s /usr/share/phpMyAdmin/ /usr/share/nginx/hosting.namenode.xyz/dbpma`
|
||||
|
||||
`chown -R nginx:nginx /var/lib/php/session`
|
||||
|
||||
`chown -R nginx:nginx /var/lib/phpMyAdmin`
|
||||
|
||||
`chown -R nginx:nginx /etc/phpMyAdmin`
|
||||
|
||||
`vi /etc/phpMyAdmin/config.inc.php`
|
||||
|
||||
```
|
||||
$cfg['Servers'][$i]['AllowNoPassword'] = false;
|
||||
$cfg['Servers'][$i]['AllowRoot'] = false;
|
||||
|
||||
$cfg['TempDir'] = '/var/lib/phpMyAdmin/temp';
|
||||
|
||||
```
|
||||
`systemctl reload php-fpm`
|
||||
|
||||
`systemctl reload nginx`
|
||||
|
||||
|
||||
### Securing phpMyAdmin further
|
||||
```
|
||||
vi pass-infile ## make a password for openssl to encrypt - one line no spaces
|
||||
```
|
||||
```
|
||||
openssl passwd -in pass-infile ## Copy the output (your encrypted password)
|
||||
```
|
||||
```
|
||||
vi /etc/nginx/pma_pass # Create a user/pass pair for the authentication gateway.
|
||||
```
|
||||
### Format:
|
||||
```
|
||||
user:p@s$w0Rd # one line
|
||||
```
|
||||
### Add the required "dbpma" section
|
||||
|
||||
`vi /etc/nginx/sites-available/example.com.conf`
|
||||
|
||||
`systemctl reload nginx`
|
||||
|
||||
[Install and secure PMA with NGINX Ubuntu 18.04](https://www.digitalocean.com/community/tutorials/how-to-install-and-secure-phpmyadmin-with-nginx-on-an-ubuntu-18-04-server)
|
||||
|
||||
|
||||
## Cockpit Setup
|
||||
|
||||
`vi /etc/cockpit/cockpit.conf`
|
||||
|
||||
`vi /etc/nginx/sites-available/example.com.conf`
|
||||
|
||||
[Proxying Cockpit over NGINX](https://github.com/cockpit-project/cockpit/wiki/Proxying-Cockpit-over-nginx)
|
||||
|
||||
[Reverse proxy Cockpit over NGINX](https://www.freesoftwareservers.com/display/FREES/Reverse+Proxy+Cockpit+over+NGinX)
|
||||
|
||||
|
||||
## Certbot setup (Examples)
|
||||
```
|
||||
certbot --nginx -d example.com -d www.example.com
|
||||
|
||||
certbot --nginx --agree-tos -d example.com -d www.example.com --email your-email-address
|
||||
|
||||
certbot --nginx --agree-tos --redirect --hsts --staple-ocsp --must-staple -d example.com -d www.example.com --email your-email-address
|
||||
```
|
||||
|
||||
`$ EDITOR=vim crontab -e`
|
||||
|
||||
```
|
||||
25 2 * * 0 /usr/bin/certbot renew --quiet # Every Sunday 2:25am
|
||||
```
|
||||
|
|
@ -3,6 +3,8 @@
|
|||
#### ***A compendium of various technical information.***
|
||||
|
||||
## Cheat Sheets
|
||||
- [AWK]((https://git.namenode.xyz/CSnap/cheetsheetz/src/branch/main/awk.md)
|
||||
- [AWKWARD- AWK and SED examples](https://git.namenode.xyz/CSnap/cheetsheetz/src/branch/main/awkward.md))
|
||||
- [BASH - The Bourne Again Shell](https://git.namenode.xyz/CSnap/cheetsheetz/src/branch/main/BASH.md)
|
||||
- [CSS - Cascading Style Sheets](https://git.namenode.xyz/CSnap/cheetsheetz/src/branch/main/CSS.md)
|
||||
- [HTML - The HyperText Markup Language](https://git.namenode.xyz/CSnap/cheetsheetz/src/branch/main/HTML.md)
|
||||
|
|
@ -12,6 +14,7 @@
|
|||
- [Perl - Practical Extraction and Reporting Language](https://git.namenode.xyz/CSnap/cheetsheetz/src/branch/main/perl.md)
|
||||
- [PHP - Proper Hypertext Pre-processor](https://git.namenode.xyz/CSnap/cheetsheetz/src/branch/main/PHP.md)
|
||||
- [Python - High-level, general-purpose programming language](https://git.namenode.xyz/CSnap/cheetsheetz/src/branch/main/python.md)
|
||||
- [SED - The Stream Editor](- [AWK]((https://git.namenode.xyz/CSnap/cheetsheetz/src/branch/main/sed.md))
|
||||
- [SQL - Structured Query Language](https://git.namenode.xyz/CSnap/cheetsheetz/src/branch/main/SQL.md)
|
||||
|
||||
## Guides
|
||||
|
|
|
|||
|
|
@ -0,0 +1,158 @@
|
|||
|
||||
# AWK Cheat Sheet
|
||||
|
||||
## Table of Contents
|
||||
|
||||
1. [AWK Basics](#awk-basics)
|
||||
2. [Patterns and Actions](#patterns-and-actions)
|
||||
3. [Variables](#variables)
|
||||
4. [Operators](#operators)
|
||||
5. [Built-in Variables](#built-in-variables)
|
||||
6. [Control Structures](#control-structures)
|
||||
7. [Functions](#functions)
|
||||
8. [Text Processing](#text-processing)
|
||||
9. [Regular Expressions](#regular-expressions)
|
||||
10. [Arrays](#arrays)
|
||||
11. [User-Defined Functions](#user-defined-functions)
|
||||
12. [Command Execution](#command-execution)
|
||||
|
||||
## AWK Basics
|
||||
|
||||
### Print Lines
|
||||
|
||||
```awk
|
||||
awk '{print}' filename
|
||||
```
|
||||
|
||||
### Print Specific Column
|
||||
|
||||
```awk
|
||||
awk '{print $2}' filename
|
||||
```
|
||||
|
||||
### Filter with Condition
|
||||
|
||||
```awk
|
||||
awk '$1 > 10 {print}' filename
|
||||
```
|
||||
|
||||
## Patterns and Actions
|
||||
|
||||
```awk
|
||||
# Pattern with Action
|
||||
pattern1 { action1 }
|
||||
pattern2 { action2 }
|
||||
```
|
||||
|
||||
## Variables
|
||||
|
||||
```awk
|
||||
# Assigning Variables
|
||||
variable = value
|
||||
|
||||
# Accessing Variables
|
||||
print variable
|
||||
```
|
||||
|
||||
## Operators
|
||||
|
||||
```awk
|
||||
# Arithmetic Operators
|
||||
+, -, *, /, %
|
||||
|
||||
# Relational Operators
|
||||
==, !=, >, <, >=, <=
|
||||
|
||||
# Logical Operators
|
||||
&&, ||
|
||||
```
|
||||
|
||||
## Built-in Variables
|
||||
|
||||
```awk
|
||||
# NR: Record Number
|
||||
NR > 1 {print "Line Number: " NR}
|
||||
|
||||
# NF: Number of Fields
|
||||
{print "Number of Fields: " NF}
|
||||
```
|
||||
|
||||
## Control Structures
|
||||
|
||||
```awk
|
||||
# if Statement
|
||||
if (condition) {
|
||||
# Commands
|
||||
}
|
||||
|
||||
# if-else Statement
|
||||
if (condition) {
|
||||
# Commands for true condition
|
||||
} else {
|
||||
# Commands for false condition
|
||||
}
|
||||
```
|
||||
|
||||
## Functions
|
||||
|
||||
```awk
|
||||
# Built-in Functions
|
||||
{
|
||||
result = sqrt(9)
|
||||
print "Square Root: " result
|
||||
}
|
||||
```
|
||||
|
||||
## Text Processing
|
||||
|
||||
### Field Separator
|
||||
|
||||
```awk
|
||||
# Change Field Separator
|
||||
awk -F',' '{print $2}' filename
|
||||
```
|
||||
|
||||
### Output Formatting
|
||||
|
||||
```awk
|
||||
# Formatting Output
|
||||
awk '{printf "Name: %-10s Age: %d\n", $1, $2}' filename
|
||||
```
|
||||
|
||||
## Regular Expressions
|
||||
|
||||
```awk
|
||||
# Match Pattern
|
||||
awk '/pattern/ {print}' filename
|
||||
```
|
||||
|
||||
## Arrays
|
||||
|
||||
```awk
|
||||
# Declare an Array
|
||||
array[1] = "apple"
|
||||
array[2] = "banana"
|
||||
|
||||
# Access Array Element
|
||||
print array[1]
|
||||
```
|
||||
|
||||
## User-Defined Functions
|
||||
|
||||
```awk
|
||||
# Define a Function
|
||||
function my_function(parameter) {
|
||||
# Commands
|
||||
}
|
||||
|
||||
# Call the Function
|
||||
my_function(value)
|
||||
```
|
||||
|
||||
## Command Execution
|
||||
|
||||
```awk
|
||||
# Execute Command
|
||||
awk '{cmd = "echo " $1; system(cmd)}' filename
|
||||
```
|
||||
|
||||
|
|
@ -0,0 +1,700 @@
|
|||
# AWK and SED Examples
|
||||
|
||||
These examples explore the combined use of AWK and SED for text processing tasks.
|
||||
|
||||
## Example 1: AWK and SED for Text Transformation
|
||||
|
||||
### Input File (input.txt)
|
||||
|
||||
```
|
||||
John Doe,25,Engineer
|
||||
Jane Smith,30,Designer
|
||||
Bob Johnson,22,Developer
|
||||
```
|
||||
|
||||
### Goal
|
||||
|
||||
We want to transform the CSV data into a formatted table with headers.
|
||||
|
||||
### Solution
|
||||
|
||||
```bash
|
||||
awk -F',' '{printf "%-15s %-3s %-10s\n", $1, $2, $3}' input.txt | sed '1i\
|
||||
Name Age Job\
|
||||
--------------- --- ----------'
|
||||
```
|
||||
|
||||
### Output
|
||||
|
||||
```
|
||||
Name Age Job
|
||||
--------------- --- ----------
|
||||
John Doe 25 Engineer
|
||||
Jane Smith 30 Designer
|
||||
Bob Johnson 22 Developer
|
||||
```
|
||||
|
||||
## Example 2: AWK and SED for Selective Printing
|
||||
|
||||
### Input File (input.txt)
|
||||
|
||||
```
|
||||
apple
|
||||
banana
|
||||
cherry
|
||||
date
|
||||
```
|
||||
|
||||
### Goal
|
||||
|
||||
Print lines containing "a" or "e" using AWK and SED.
|
||||
|
||||
### Solution
|
||||
|
||||
```bash
|
||||
awk '/a|e/' input.txt | sed -n '/a\|e/p'
|
||||
```
|
||||
|
||||
### Output
|
||||
|
||||
```
|
||||
apple
|
||||
banana
|
||||
date
|
||||
```
|
||||
|
||||
## Example 3: AWK and SED for Filtering and Sorting
|
||||
|
||||
### Input File (input.txt)
|
||||
|
||||
```
|
||||
apple,5
|
||||
banana,2
|
||||
cherry,8
|
||||
date,1
|
||||
```
|
||||
|
||||
### Goal
|
||||
|
||||
Filter lines with the second column greater than 2, sort by the second column, and add a header.
|
||||
|
||||
### Solution
|
||||
|
||||
```bash
|
||||
awk -F',' '$2 > 2' input.txt | sort -t',' -k2n | sed '1i\
|
||||
Fruit,Quantity'
|
||||
```
|
||||
|
||||
### Output
|
||||
|
||||
```
|
||||
Fruit,Quantity
|
||||
apple,5
|
||||
cherry,8
|
||||
```
|
||||
|
||||
## Example 4: AWK and SED for Text Extraction
|
||||
|
||||
### Input File (input.txt)
|
||||
|
||||
```
|
||||
Lorem ipsum dolor sit amet, consectetur adipiscing elit.
|
||||
Sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
|
||||
Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris.
|
||||
```
|
||||
|
||||
### Goal
|
||||
|
||||
Extract sentences containing the word "sed" and replace "sed" with "AWK".
|
||||
|
||||
### Solution
|
||||
|
||||
```bash
|
||||
awk 'BEGIN{RS="\\."} /sed/' input.txt | sed 's/sed/AWK/g'
|
||||
```
|
||||
|
||||
### Output
|
||||
|
||||
```
|
||||
Sed do eiusmod tempor incididunt ut labore et dolore magna aliqua
|
||||
```
|
||||
|
||||
## Example 5: AWK and SED for HTML Tag Extraction
|
||||
|
||||
### Input File (input.html)
|
||||
|
||||
```html
|
||||
<div class="container">
|
||||
<p>This is a paragraph.</p>
|
||||
<a href="https://example.com">Visit our website</a>
|
||||
</div>
|
||||
```
|
||||
|
||||
### Goal
|
||||
|
||||
Extract and list all HTML tags present in the file.
|
||||
|
||||
### Solution
|
||||
|
||||
```bash
|
||||
sed -n 's/<[^>]*>//p' input.html | awk '{print tolower($0)}'
|
||||
```
|
||||
|
||||
### Output
|
||||
|
||||
```
|
||||
div class="container"
|
||||
p
|
||||
a href="https://example.com"
|
||||
/a
|
||||
```
|
||||
|
||||
## Example 6: AWK and SED for JSON Formatting
|
||||
|
||||
### Input File (input.json)
|
||||
|
||||
```json
|
||||
{
|
||||
"name": "John Doe",
|
||||
"age": 30,
|
||||
"city": "New York"
|
||||
}
|
||||
```
|
||||
|
||||
### Goal
|
||||
|
||||
Format the JSON to be human-readable using AWK and SED.
|
||||
|
||||
### Solution
|
||||
|
||||
```bash
|
||||
awk -v RS= '{$1=$1}1' input.json | sed 's/":"/": "/g; s/{/{\n/g; s/}/\n}/g'
|
||||
```
|
||||
|
||||
### Output
|
||||
|
||||
```
|
||||
{
|
||||
"name": "John Doe",
|
||||
"age": 30,
|
||||
"city": "New York"
|
||||
}
|
||||
```
|
||||
|
||||
## Example 7: AWK and SED for Log Analysis
|
||||
|
||||
### Input File (logfile.txt)
|
||||
|
||||
```
|
||||
2023-01-15 10:23:15 INFO User login successful
|
||||
2023-01-15 10:30:42 ERROR Invalid password attempt
|
||||
2023-01-15 11:05:18 INFO User logout
|
||||
```
|
||||
|
||||
### Goal
|
||||
|
||||
Extract and format log entries containing "ERROR".
|
||||
|
||||
### Solution
|
||||
|
||||
```bash
|
||||
awk '/ERROR/' logfile.txt | sed 's/\([0-9]\{4\}-[0-9]\{2\}-[0-9]\{2\} [0-9]\{2\}:[0-9]\{2\}:[0-9]\{2\}\) \(ERROR .*\)/Timestamp: \1\n\2\n/'
|
||||
```
|
||||
|
||||
### Output
|
||||
|
||||
```
|
||||
Timestamp: 2023-01-15 10:30:42
|
||||
ERROR Invalid password attempt
|
||||
```
|
||||
|
||||
## Example 8: AWK and SED for CSV Transformation
|
||||
|
||||
### Input File (data.csv)
|
||||
|
||||
```
|
||||
Name,Age,Occupation
|
||||
John,28,Engineer
|
||||
Jane,35,Designer
|
||||
Bob,22,Developer
|
||||
```
|
||||
|
||||
### Goal
|
||||
|
||||
Transform the CSV data into a tab-separated format.
|
||||
|
||||
### Solution
|
||||
|
||||
```bash
|
||||
awk -F',' '{printf "%s\t%s\t%s\n", $1, $2, $3}' data.csv | sed '1i\
|
||||
Name\tAge\tOccupation'
|
||||
```
|
||||
|
||||
### Output
|
||||
|
||||
```
|
||||
Name Age Occupation
|
||||
John 28 Engineer
|
||||
Jane 35 Designer
|
||||
Bob 22 Developer
|
||||
```
|
||||
|
||||
## Example 9: AWK and SED for XML Tag Removal
|
||||
|
||||
### Input File (data.xml)
|
||||
|
||||
```xml
|
||||
<root>
|
||||
<item>Apple</item>
|
||||
<item>Banana</item>
|
||||
<item>Cherry</item>
|
||||
</root>
|
||||
```
|
||||
|
||||
### Goal
|
||||
|
||||
Remove all XML tags and extract the content.
|
||||
|
||||
### Solution
|
||||
|
||||
```bash
|
||||
sed 's/<[^>]*>//g' data.xml | awk 'NF'
|
||||
```
|
||||
|
||||
### Output
|
||||
|
||||
```
|
||||
Apple
|
||||
Banana
|
||||
Cherry
|
||||
```
|
||||
|
||||
## Example 10: AWK and SED for Markdown Table Conversion
|
||||
|
||||
### Input File (table.md)
|
||||
|
||||
```markdown
|
||||
| Name | Age | Occupation |
|
||||
|-------|-----|-------------|
|
||||
| John | 28 | Engineer |
|
||||
| Jane | 35 | Designer |
|
||||
| Bob | 22 | Developer |
|
||||
```
|
||||
|
||||
### Goal
|
||||
|
||||
Convert the Markdown table into a CSV format.
|
||||
|
||||
### Solution
|
||||
|
||||
```bash
|
||||
sed -n '/|/p' table.md | awk -F'|' '{gsub(/^[ \t]+|[ \t]+$/, "", $2); gsub(/^[ \t]+|[ \t]+$/, "", $3); gsub(/^[ \t]+|[ \t]+$/, "", $4); printf "%s,%s,%s\n", $2, $3, $4}'
|
||||
```
|
||||
|
||||
### Output
|
||||
|
||||
```
|
||||
Name,Age,Occupation
|
||||
John,28,Engineer
|
||||
Jane,35,Designer
|
||||
Bob,22,Developer
|
||||
```
|
||||
|
||||
## Example 11: AWK and SED for HTML List Extraction
|
||||
|
||||
### Input File (list.html)
|
||||
|
||||
```html
|
||||
<ul>
|
||||
<li>Apple</li>
|
||||
<li>Banana</li>
|
||||
<li>Cherry</li>
|
||||
</ul>
|
||||
```
|
||||
|
||||
### Goal
|
||||
|
||||
Extract and list items from an HTML unordered list.
|
||||
|
||||
### Solution
|
||||
|
||||
```bash
|
||||
sed -n '/<li>/s/<li>\(.*\)<\/li>/\1/p' list.html | awk '{print "- " $0}'
|
||||
```
|
||||
|
||||
### Output
|
||||
|
||||
```
|
||||
- Apple
|
||||
- Banana
|
||||
- Cherry
|
||||
```
|
||||
|
||||
## Example 12: AWK and SED for YAML to JSON Conversion
|
||||
|
||||
### Input File (data.yaml)
|
||||
|
||||
```yaml
|
||||
name: John Doe
|
||||
age: 30
|
||||
city: New York
|
||||
```
|
||||
|
||||
### Goal
|
||||
|
||||
Convert YAML data into JSON format.
|
||||
|
||||
### Solution
|
||||
|
||||
```bash
|
||||
sed -n '/^[^#]/s/: /: "/p' data.yaml | awk '{printf "%s", $0} END {print "\""}' | sed 's/"/\\"/g' | awk 'BEGIN {print "{"} {print " " $0} END {print "}"}'
|
||||
```
|
||||
|
||||
### Output
|
||||
|
||||
```
|
||||
{
|
||||
name: "John Doe",
|
||||
age: "30",
|
||||
city: "New York"
|
||||
}
|
||||
```
|
||||
|
||||
## Example 13: AWK and SED for Extracting URLs
|
||||
|
||||
### Input File (text_with_urls.txt)
|
||||
|
||||
```
|
||||
Visit our website: https://example.com
|
||||
For more information, check out: https://documentation.com
|
||||
```
|
||||
|
||||
### Goal
|
||||
|
||||
Extract and list all URLs from the text.
|
||||
|
||||
### Solution
|
||||
|
||||
```bash
|
||||
sed -n 's/.*\(https\?:\/\/[^ ]*\).*/\1/p' text_with_urls.txt | awk '!a[$0]++'
|
||||
```
|
||||
|
||||
### Output
|
||||
|
||||
```
|
||||
https://example.com
|
||||
https://documentation.com
|
||||
```
|
||||
|
||||
## Example 14: AWK and SED for Data Filtering and Sorting
|
||||
|
||||
### Input File (data.txt)
|
||||
|
||||
```
|
||||
Name|Age|Occupation
|
||||
John|28|Engineer
|
||||
Jane|35|Designer
|
||||
Bob|22|Developer
|
||||
```
|
||||
|
||||
### Goal
|
||||
|
||||
Filter entries with Age greater than 25 and sort by Age.
|
||||
|
||||
### Solution
|
||||
|
||||
```bash
|
||||
awk -F'|' '$2 > 25' data.txt | sort -t'|' -k2n | sed '1i\
|
||||
Name|Age|Occupation'
|
||||
```
|
||||
|
||||
### Output
|
||||
|
||||
```
|
||||
Name|Age|Occupation
|
||||
Jane|35|Designer
|
||||
John|28|Engineer
|
||||
```
|
||||
|
||||
## Example 15: AWK and SED for Line Reversal
|
||||
|
||||
### Input File (reverse_me.txt)
|
||||
|
||||
```
|
||||
Line 1
|
||||
Line 2
|
||||
Line 3
|
||||
```
|
||||
|
||||
### Goal
|
||||
|
||||
Reverse the order of lines in the file.
|
||||
|
||||
### Solution
|
||||
|
||||
```bash
|
||||
awk '{a[i++]=$0} END {for (j=i-1; j>=0;) print a[j--] }' reverse_me.txt | sed '1i\
|
||||
Reversed Lines'
|
||||
```
|
||||
|
||||
### Output
|
||||
|
||||
```
|
||||
Reversed Lines
|
||||
Line 3
|
||||
Line 2
|
||||
Line 1
|
||||
```
|
||||
|
||||
## Example 16: AWK and SED for Word Frequency Analysis
|
||||
|
||||
### Input File (text_analysis.txt)
|
||||
|
||||
```
|
||||
apple orange banana
|
||||
banana apple orange
|
||||
orange banana apple
|
||||
```
|
||||
|
||||
### Goal
|
||||
|
||||
Count the frequency of each word and sort the results.
|
||||
|
||||
### Solution
|
||||
|
||||
```bash
|
||||
awk '{for(i=1; i<=NF; i++) words[$i]++} END {for(word in words) print word, words[word]}' text_analysis.txt | sort -k2n -r | sed '1i\
|
||||
Word Frequency'
|
||||
```
|
||||
|
||||
### Output
|
||||
|
||||
```
|
||||
Word Frequency
|
||||
banana 3
|
||||
apple 3
|
||||
orange 3
|
||||
```
|
||||
|
||||
## Example 17: AWK and SED for JSON Pretty Printing
|
||||
|
||||
### Input File (json_data.json)
|
||||
|
||||
```json
|
||||
{"name":"John","age":30,"city":"New York"}
|
||||
```
|
||||
|
||||
### Goal
|
||||
|
||||
Format the JSON data for better readability.
|
||||
|
||||
### Solution
|
||||
|
||||
```bash
|
||||
awk -v RS= '{$1=$1}1' json_data.json | sed 's/":"/": "/g; s/{/{\n/g; s/}/\n}/g'
|
||||
```
|
||||
|
||||
### Output
|
||||
|
||||
```
|
||||
{
|
||||
"name": "John",
|
||||
"age": 30,
|
||||
"city": "New York"
|
||||
}
|
||||
```
|
||||
|
||||
## Example 18: AWK and SED for Extracting Email Addresses
|
||||
|
||||
### Input File (emails.txt)
|
||||
|
||||
```
|
||||
Contact us at: info@example.com
|
||||
For support, email support@example.com
|
||||
```
|
||||
|
||||
### Goal
|
||||
|
||||
Extract and list all email addresses from the text.
|
||||
|
||||
### Solution
|
||||
|
||||
```bash
|
||||
sed -n 's/.*\b\([a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}\)\b.*/\1/p' emails.txt | awk '!a[$0]++' | sed '1i\
|
||||
Email Addresses'
|
||||
```
|
||||
|
||||
### Output
|
||||
|
||||
```
|
||||
Email Addresses
|
||||
info@example.com
|
||||
support@example.com
|
||||
```
|
||||
|
||||
## Example 19: Convert Markdown Headings to HTML
|
||||
|
||||
### Input (markdown_headings.md)
|
||||
|
||||
```markdown
|
||||
# Heading 1
|
||||
## Heading 2
|
||||
### Heading 3
|
||||
```
|
||||
|
||||
### Goal
|
||||
|
||||
Convert Markdown headings to HTML headings.
|
||||
|
||||
### Solution
|
||||
|
||||
```bash
|
||||
sed -n 's/^# \(.*\)$/\<h1\>\1\<\/h1\>/p; s/^## \(.*\)$/\<h2\>\1\<\/h2\>/p; s/^### \(.*\)$/\<h3\>\1\<\/h3\>/p' markdown_headings.md
|
||||
```
|
||||
|
||||
### Output
|
||||
|
||||
```html
|
||||
<h1>Heading 1</h1>
|
||||
<h2>Heading 2</h2>
|
||||
<h3>Heading 3</h3>
|
||||
```
|
||||
|
||||
## Example 20: Convert Markdown Lists to HTML
|
||||
|
||||
### Input (markdown_lists.md)
|
||||
|
||||
```markdown
|
||||
- Item 1
|
||||
- Item 2
|
||||
- Subitem A
|
||||
- Subitem B
|
||||
```
|
||||
|
||||
### Goal
|
||||
|
||||
Convert Markdown lists to HTML lists.
|
||||
|
||||
### Solution
|
||||
|
||||
```bash
|
||||
awk '/^-/ {gsub(/^-/, "<li>"); print "<ul>"; print $0} !/^-/ {gsub(/^ /, ""); print $0 "</li>"} END {print "</ul>"}' markdown_lists.md
|
||||
```
|
||||
|
||||
### Output
|
||||
|
||||
```html
|
||||
<ul>
|
||||
<li>Item 1</li>
|
||||
<li>Item 2<ul><li>Subitem A</li><li>Subitem B</li></ul></li>
|
||||
</ul>
|
||||
```
|
||||
|
||||
## Example 21: Convert Bold and Italic Markdown to HTML
|
||||
|
||||
### Input (markdown_bold_italics.md)
|
||||
|
||||
```markdown
|
||||
**Bold Text** *Italic Text*
|
||||
```
|
||||
|
||||
### Goal
|
||||
|
||||
Convert Markdown bold and italic text to HTML.
|
||||
|
||||
### Solution
|
||||
|
||||
```bash
|
||||
sed -e 's/\*\*\(.*\)\*\*/\<strong\>\1\<\/strong\>/g' -e 's/\*\([^*]*\)\*/\<em\>\1\<\/em\>/g' markdown_bold_italics.md
|
||||
```
|
||||
|
||||
### Output
|
||||
|
||||
```html
|
||||
<strong>Bold Text</strong> <em>Italic Text</em>
|
||||
```
|
||||
|
||||
## Example 22: Reverse the Order of Lines
|
||||
|
||||
### Input (original_order.txt)
|
||||
|
||||
```
|
||||
Line 1
|
||||
Line 2
|
||||
Line 3
|
||||
```
|
||||
|
||||
### Goal
|
||||
|
||||
Reverse the order of lines in the file.
|
||||
|
||||
### Solution
|
||||
|
||||
```bash
|
||||
awk '{a[i++]=$0} END {for (j=i-1; j>=0;) print a[j--] }' original_order.txt
|
||||
```
|
||||
|
||||
### Output
|
||||
|
||||
```
|
||||
Line 3
|
||||
Line 2
|
||||
Line 1
|
||||
```
|
||||
|
||||
## Example 23: Sort Lines Alphabetically
|
||||
|
||||
### Input (unsorted_lines.txt)
|
||||
|
||||
```
|
||||
Banana
|
||||
Apple
|
||||
Cherry
|
||||
```
|
||||
|
||||
### Goal
|
||||
|
||||
Sort lines alphabetically.
|
||||
|
||||
### Solution
|
||||
|
||||
```bash
|
||||
sort unsorted_lines.txt
|
||||
```
|
||||
|
||||
### Output
|
||||
|
||||
```
|
||||
Apple
|
||||
Banana
|
||||
Cherry
|
||||
```
|
||||
|
||||
## Example 24: Sort Lines by Line Length
|
||||
|
||||
### Input (lines_by_length.txt)
|
||||
|
||||
```
|
||||
Short
|
||||
VeryLongLineWithManyCharacters
|
||||
MediumLength
|
||||
```
|
||||
|
||||
### Goal
|
||||
|
||||
Sort lines by their length.
|
||||
|
||||
### Solution
|
||||
|
||||
```bash
|
||||
awk '{ print length, $0 | "sort -n"}' lines_by_length.txt | cut -d ' ' -f2-
|
||||
```
|
||||
|
||||
### Output
|
||||
|
||||
```
|
||||
Short
|
||||
MediumLength
|
||||
VeryLongLineWithManyCharacters
|
||||
```
|
||||
|
||||
|
|
@ -0,0 +1,79 @@
|
|||
# Regular Expressions (Regex) Cheat Sheet
|
||||
|
||||
In this cheat sheet, we'll explore common Regular Expressions (regex) patterns and their meanings.
|
||||
|
||||
## Table of Contents
|
||||
|
||||
1. [Anchors](#anchors)
|
||||
2. [Character Classes](#character-classes)
|
||||
3. [Quantifiers](#quantifiers)
|
||||
4. [Grouping and Capturing](#grouping-and-capturing)
|
||||
5. [Alternation](#alternation)
|
||||
6. [Assertions](#assertions)
|
||||
7. [Modifiers](#modifiers)
|
||||
8. [Escape Characters](#escape-characters)
|
||||
9. [Special Characters](#special-characters)
|
||||
|
||||
## Anchors
|
||||
|
||||
- `^`: Asserts the start of a line.
|
||||
- `$`: Asserts the end of a line.
|
||||
- `\b`: Asserts a word boundary.
|
||||
- `\B`: Asserts a non-word boundary.
|
||||
|
||||
## Character Classes
|
||||
|
||||
- `.`: Matches any single character except a newline.
|
||||
- `[abc]`: Matches any one of the characters a, b, or c.
|
||||
- `[^abc]`: Matches any character except a, b, or c.
|
||||
- `[a-z]`: Matches any lowercase letter.
|
||||
- `[A-Z]`: Matches any uppercase letter.
|
||||
- `[0-9]`: Matches any digit.
|
||||
- `\d`: Matches any digit (short for `[0-9]`).
|
||||
- `\D`: Matches any non-digit.
|
||||
- `\w`: Matches any word character (alphanumeric + underscore).
|
||||
- `\W`: Matches any non-word character.
|
||||
- `\s`: Matches any whitespace character.
|
||||
- `\S`: Matches any non-whitespace character.
|
||||
|
||||
## Quantifiers
|
||||
|
||||
- `*`: Matches 0 or more occurrences of the preceding character or group.
|
||||
- `+`: Matches 1 or more occurrences of the preceding character or group.
|
||||
- `?`: Matches 0 or 1 occurrence of the preceding character or group.
|
||||
- `{n}`: Matches exactly n occurrences of the preceding character or group.
|
||||
- `{n,}`: Matches n or more occurrences of the preceding character or group.
|
||||
- `{n,m}`: Matches between n and m occurrences of the preceding character or group.
|
||||
|
||||
## Grouping and Capturing
|
||||
|
||||
- `(...)`: Groups patterns together. Captures the matched text.
|
||||
- `(?:...)`: Groups patterns together without capturing.
|
||||
- `\1`, `\2`, ...: Refers to the first, second, etc. captured group.
|
||||
|
||||
## Alternation
|
||||
|
||||
- `|`: Acts like a logical OR. Matches the pattern before or after the pipe.
|
||||
|
||||
## Assertions
|
||||
|
||||
- `(?=...)`: Positive lookahead assertion.
|
||||
- `(?!...)`: Negative lookahead assertion.
|
||||
- `(?<=...)`: Positive lookbehind assertion.
|
||||
- `(?<!...)`: Negative lookbehind assertion.
|
||||
|
||||
## Modifiers
|
||||
|
||||
- `i`: Case-insensitive matching.
|
||||
- `g`: Global matching (find all matches).
|
||||
- `m`: Multiline matching (`^` and `$` match the start/end of each line).
|
||||
|
||||
## Escape Characters
|
||||
|
||||
- `\`: Escapes a special character, allowing it to be treated as a literal.
|
||||
|
||||
## Special Characters
|
||||
|
||||
- `*`, `+`, `?`, `{`, `}`, `|`, `()`, `[]`, `.`, `\`: Special characters with their literal meanings when escaped.
|
||||
|
||||
|
||||
|
|
@ -0,0 +1,132 @@
|
|||
# Comprehensive SED Cheat Sheet
|
||||
|
||||
## Table of Contents
|
||||
|
||||
1. [SED Basics](#sed-basics)
|
||||
2. [Print Operations](#print-operations)
|
||||
3. [Substitution](#substitution)
|
||||
4. [Deletion](#deletion)
|
||||
5. [Insertion](#insertion)
|
||||
6. [Append and Replace](#append-and-replace)
|
||||
7. [Selective Printing](#selective-printing)
|
||||
8. [Text Formatting](#text-formatting)
|
||||
9. [Multiple Commands](#multiple-commands)
|
||||
10. [Regular Expressions](#regular-expressions)
|
||||
11. [Grouping and Backreferences](#grouping-and-backreferences)
|
||||
12. [File In-Place Editing](#file-in-place-editing)
|
||||
13. [SED Scripts](#sed-scripts)
|
||||
|
||||
## SED Basics
|
||||
|
||||
### Basic Syntax
|
||||
|
||||
```bash
|
||||
sed 'command' filename
|
||||
```
|
||||
|
||||
### In-Place Editing
|
||||
|
||||
```bash
|
||||
sed -i 'command' filename
|
||||
```
|
||||
|
||||
## Print Operations
|
||||
|
||||
```bash
|
||||
# Print All Lines
|
||||
sed -n 'p' filename
|
||||
|
||||
# Print Line Numbers
|
||||
sed -n '10p' filename
|
||||
|
||||
# Print Range of Lines
|
||||
sed -n '5,10p' filename
|
||||
```
|
||||
|
||||
## Substitution
|
||||
|
||||
```bash
|
||||
# Substitute Text
|
||||
sed 's/pattern/replacement/' filename
|
||||
|
||||
# Global Substitution
|
||||
sed 's/pattern/replacement/g' filename
|
||||
```
|
||||
|
||||
## Deletion
|
||||
|
||||
```bash
|
||||
# Delete Matching Lines
|
||||
sed '/pattern/d' filename
|
||||
|
||||
# Delete Lines by Number
|
||||
sed '5d' filename
|
||||
```
|
||||
|
||||
## Insertion
|
||||
|
||||
```bash
|
||||
# Insert Line Before Matching Pattern
|
||||
sed '/pattern/i new_line' filename
|
||||
```
|
||||
|
||||
## Append and Replace
|
||||
|
||||
```bash
|
||||
# Append Line After Matching Pattern
|
||||
sed '/pattern/a new_line' filename
|
||||
|
||||
# Replace Line with New Text
|
||||
sed '/pattern/c new_line' filename
|
||||
```
|
||||
|
||||
## Selective Printing
|
||||
|
||||
```bash
|
||||
# Print Lines Matching Pattern
|
||||
sed -n '/pattern/p' filename
|
||||
```
|
||||
|
||||
## Text Formatting
|
||||
|
||||
```bash
|
||||
# Convert to Uppercase
|
||||
sed 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/' filename
|
||||
```
|
||||
|
||||
## Multiple Commands
|
||||
|
||||
```bash
|
||||
# Execute Multiple Commands
|
||||
sed -e 'command1' -e 'command2' filename
|
||||
```
|
||||
|
||||
## Regular Expressions
|
||||
|
||||
```bash
|
||||
# Use Regular Expressions
|
||||
sed '/^pattern/s/replacement/' filename
|
||||
```
|
||||
|
||||
## Grouping and Backreferences
|
||||
|
||||
```bash
|
||||
# Use Grouping and Backreferences
|
||||
sed 's/\(pattern1\)\(pattern2\)/\2\1/' filename
|
||||
```
|
||||
|
||||
## File In-Place Editing
|
||||
|
||||
```bash
|
||||
# In-Place Editing with Backup
|
||||
sed -i.bak 's/pattern/replacement/' filename
|
||||
```
|
||||
|
||||
## SED Scripts
|
||||
|
||||
```bash
|
||||
# Create and Use SED Script
|
||||
echo 's/pattern/replacement/' > myscript.sed
|
||||
sed -f myscript.sed filename
|
||||
```
|
||||
|
||||
Loading…
Reference in New Issue