grep 命令用于在文本文件中查找匹配正则表达式的行,并打印出。
sed 命令用于对文本文件进行修改,比如替换、删除、插入等操作。
grep 命令的基本语法是:
grep [选项] pattern [文件]
pattern 是要查找的正则表达式,文件是要查找的文本文件。如果没有指定文件,grep 会从标准输入(stdin)读取数据。
sed 命令的基本语法是:
sed [选项] commands [文件]
commands 是要执行的 sed 操作,文件是要修改的文本文件。如果没有指定文件,sed 会从标准输入(stdin)读取数据。
下面是一些 grep 和 sed 的实例教程:
假设有一个名为 data.txt 的文本文件,内容如下:
name: Alice
age: 20
gender: female
name: Bob
age: 25
gender: male
name: Charlie
age: 30
gender: male
- 查找包含 name 的行并打印出来:
grep name data.txt
输出:
name: Alice
name: Bob
name: Charlie
- 查找包含 age 的行并打印出来,并显示行号:
grep -n age data.txt
输出:
2:age: 20
5:age: 25
8:age: 30
- 查找包含 female 或 male 的行并打印出来,并忽略大小写:
grep -i "female\|male" data.txt
输出:
gender: female
gender: male
gender: male
- 查找不包含 gender 的行并打印出来,并统计匹配行数:
grep -vc gender data.txt
输出:
6
- 将所有 name 替换为 username 并保存到新文件 new_data.txt 中:
sed 's/name/username/g' data.txt > new_data.txt
新文件 new_data.txt 的内容为:
username: Alice
age: 20
gender: female
username: Bob
age: 25
gender: male
username: Charlie
age: 30
gender: male
- 将所有 age 后面的数字加上10并保存到原文件中(需要使用 -i 选项):
sed -i 's/\(age:\) \([0-9]\+\)/\1 \2+10/' data.txt
原文件 data.txt 的内容变为:
name: Alice
age: 30
gender: female
name: Bob
age:35
gender: male
name:Charlie
age: 40
gender: male
- 删除所有包含 gender 的行并保存到原文件中(需要使用 -i 选项):
sed -i '/gender/d' data.txt
原文件 data.txt 的内容变为:
name: Alice
age: 30
name: Bob
age: 35
name: Charlie
age: 40
(1) Manipulating text with sed and grep | Enable Sysadmin. https://www.redhat.com/sysadmin/manipulating-text-sed-grep
(2) Powerful Text Processing with grep and sed: A Practical Guide. https://www.fosslinux.com/103848/searching-and-manipulating-text-with-grep-and-sed.htm
(3) Text Processing in Linux: Understanding Grep, sed, and AWK. https://www.linode.com/docs/guides/differences-between-grep-sed-awk/
(4) Is there a basic tutorial for grep, awk and sed?. https://unix.stackexchange.com/questions/2434/is-there-a-basic-tutorial-for-grep-awk-and-sed