Subsections of Command

Echo

在Windows批处理中(使用ECHO命令)

ECHO 这是要写入的内容 > filename.txt
ECHO 这是要追加的内容 >> filename.txt

在Linux/macOS Shell中

echo "这是要写入的内容" > filename.txt
echo "这是要追加的内容" >> filename.txt

在Python中

# 写入文件(覆盖)
with open('filename.txt', 'w', encoding='utf-8') as f:
    f.write("这是要写入的内容\n")

# 追加内容
with open('filename.txt', 'a', encoding='utf-8') as f:
    f.write("这是要追加的内容\n")

在PowerShell中

"这是要写入的内容" | Out-File -FilePath filename.txt
"这是要追加的内容" | Out-File -FilePath filename.txt -Append

在JavaScript (Node.js) 中

const fs = require('fs');

// 写入文件(覆盖)
fs.writeFileSync('filename.txt', '这是要写入的内容\n');

// 追加内容
fs.appendFileSync('filename.txt', '这是要追加的内容\n');
Sep 7, 2025

Grep

grep 是 Linux 中强大的文本搜索工具,其名称来源于 “Global Regular Expression Print”。以下是 grep 命令的常见用法:

基本语法

grep [选项] 模式 [文件...]

常用选项

1. 基础搜索

# 在文件中搜索包含"error"的行
grep "error" filename.log

# 搜索时忽略大小写
grep -i "error" filename.log

# 显示不匹配的行
grep -v "success" filename.log

# 显示匹配的行号
grep -n "pattern" filename.txt

2. 递归搜索

# 在当前目录及子目录中递归搜索
grep -r "function_name" .

# 递归搜索并显示文件名
grep -r -l "text" /path/to/directory

3. 输出控制

# 只显示匹配的文件名(不显示具体行)
grep -l "pattern" *.txt

# 显示匹配行前后的内容
grep -A 3 "error" logfile.txt    # 显示匹配行后3行
grep -B 2 "error" logfile.txt    # 显示匹配行前2行
grep -C 2 "error" logfile.txt    # 显示匹配行前后各2行

# 只显示匹配的部分(而非整行)
grep -o "pattern" file.txt

4. 正则表达式

# 使用扩展正则表达式
grep -E "pattern1|pattern2" file.txt

# 匹配以"start"开头的行
grep "^start" file.txt

# 匹配以"end"结尾的行
grep "end$" file.txt

# 匹配空行
grep "^$" file.txt

# 使用字符类
grep "[0-9]" file.txt           # 包含数字的行
grep "[a-zA-Z]" file.txt        # 包含字母的行

5. 文件处理

# 从多个文件中搜索
grep "text" file1.txt file2.txt

# 使用通配符
grep "pattern" *.log

# 从标准输入读取
cat file.txt | grep "pattern"
echo "some text" | grep "text"

6. 统计信息

# 统计匹配的行数
grep -c "pattern" file.txt

# 统计匹配的次数(可能一行有多个匹配)
grep -o "pattern" file.txt | wc -l

实用示例

1. 日志分析

# 查找今天的错误日志
grep "ERROR" /var/log/syslog | grep "$(date '+%Y-%m-%d')"

# 查找包含IP地址的行
grep -E "[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+" access.log

2. 代码搜索

# 在项目中查找函数定义
grep -r "function_name(" src/

# 查找包含TODO或FIXME的注释
grep -r -E "TODO|FIXME" ./

# 查找空行并统计数量
grep -c "^$" source_code.py

3. 系统监控

# 查看特定进程
ps aux | grep "nginx"

# 检查端口占用
netstat -tulpn | grep ":80"

4. 文件内容检查

# 检查配置文件中的有效设置(忽略注释和空行)
grep -v "^#" /etc/ssh/sshd_config | grep -v "^$"

# 查找包含邮箱地址的行
grep -E "\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Z|a-z]{2,}\b" file.txt

高级技巧

1. 使用上下文

# 显示错误及其上下文
grep -C 3 -i "error" application.log

2. 反向引用

# 使用扩展正则表达式的分组
grep -E "(abc).*\1" file.txt  # 查找重复的"abc"

3. 二进制文件搜索

# 在二进制文件中搜索文本字符串
grep -a "text" binaryfile

4. 颜色高亮

# 启用颜色高亮(通常默认开启)
grep --color=auto "pattern" file.txt

常用组合

与其它命令配合

# 查找并排序
grep "pattern" file.txt | sort

# 查找并计数
grep -o "pattern" file.txt | sort | uniq -c

# 查找并保存结果
grep "error" logfile.txt > errors.txt

这些是 grep 命令最常用的用法,掌握它们可以大大提高在 Linux 环境下处理文本的效率。

Sep 7, 2025

Sed

sed(Stream Editor)是 Linux 中强大的流编辑器,用于对文本进行过滤和转换。以下是 sed 命令的常见用法:

基本语法

sed [选项] '命令' 文件
sed [选项] -e '命令1' -e '命令2' 文件
sed [选项] -f 脚本文件 文件

常用选项

1. 基础选项

# 编辑文件并备份原文件
sed -i.bak 's/old/new/g' file.txt

# 直接修改文件(无备份)
sed -i 's/old/new/g' file.txt

# 只打印匹配的行
sed -n '命令' file.txt

# 使用扩展正则表达式
sed -E '命令' file.txt

文本替换

1. 基本替换

# 替换每行第一个匹配
sed 's/old/new/' file.txt

# 替换所有匹配(全局替换)
sed 's/old/new/g' file.txt

# 替换第N次出现的匹配
sed 's/old/new/2' file.txt    # 替换第二次出现

# 只替换匹配的行
sed '/pattern/s/old/new/g' file.txt

2. 替换分隔符

# 当模式包含斜杠时,可以使用其他分隔符
sed 's|/usr/local|/opt|g' file.txt
sed 's#old#new#g' file.txt

3. 引用和转义

# 使用&引用匹配的整个文本
sed 's/[0-9]*/[&]/g' file.txt

# 使用分组引用
sed 's/\([a-z]*\) \([a-z]*\)/\2 \1/' file.txt
sed -E 's/([a-z]*) ([a-z]*)/\2 \1/' file.txt  # 扩展正则表达式

行操作

1. 行寻址

# 指定行号
sed '5s/old/new/' file.txt        # 只对第5行替换
sed '1,5s/old/new/g' file.txt     # 1-5行替换
sed '5,$s/old/new/g' file.txt     # 第5行到最后一行

# 使用正则表达式匹配行
sed '/^#/s/old/new/' file.txt     # 只对以#开头的行
sed '/start/,/end/s/old/new/g' file.txt  # 从start到end的行

2. 删除行

# 删除空行
sed '/^$/d' file.txt

# 删除注释行
sed '/^#/d' file.txt

# 删除特定行号
sed '5d' file.txt                 # 删除第5行
sed '1,5d' file.txt               # 删除1-5行
sed '/pattern/d' file.txt         # 删除匹配模式的行

3. 插入和添加

# 在指定行前插入
sed '5i\插入的内容' file.txt

# 在指定行后添加
sed '5a\添加的内容' file.txt

# 在文件开头插入
sed '1i\开头内容' file.txt

# 在文件末尾添加
sed '$a\结尾内容' file.txt

4. 修改行

# 替换整行
sed '5c\新的行内容' file.txt

# 替换匹配模式的行
sed '/pattern/c\新的行内容' file.txt

高级操作

1. 打印控制

# 只打印匹配的行(类似grep)
sed -n '/pattern/p' file.txt

# 打印行号
sed -n '/pattern/=' file.txt

# 同时打印行号和内容
sed -n '/pattern/{=;p}' file.txt

2. 多重命令

# 使用分号分隔多个命令
sed 's/old/new/g; s/foo/bar/g' file.txt

# 使用-e选项
sed -e 's/old/new/' -e 's/foo/bar/' file.txt

# 对同一行执行多个操作
sed '/pattern/{s/old/new/; s/foo/bar/}' file.txt

3. 文件操作

# 读取文件并插入
sed '/pattern/r otherfile.txt' file.txt

# 将匹配行写入文件
sed '/pattern/w output.txt' file.txt

4. 保持空间操作

# 模式空间与保持空间交换
sed '1!G;h;$!d' file.txt          # 反转文件行顺序

# 复制到保持空间
sed '/pattern/h' file.txt

# 从保持空间取回
sed '/pattern/g' file.txt

实用示例

1. 配置文件修改

# 修改SSH端口
sed -i 's/^#Port 22/Port 2222/' /etc/ssh/sshd_config

# 启用root登录
sed -i 's/^#PermitRootLogin yes/PermitRootLogin yes/' /etc/ssh/sshd_config

# 注释掉某行
sed -i '/pattern/s/^/#/' file.txt

# 取消注释
sed -i '/pattern/s/^#//' file.txt

2. 日志处理

# 提取时间戳
sed -n 's/.*\([0-9]\{2\}:[0-9]\{2\}:[0-9]\{2\}\).*/\1/p' logfile

# 删除空白字符
sed 's/^[ \t]*//;s/[ \t]*$//' file.txt

3. 文本格式化

# 每行末尾添加逗号
sed 's/$/,/' file.txt

# 合并连续空行
sed '/^$/{N;/^\n$/D}' file.txt

# 在每行前添加行号
sed = file.txt | sed 'N;s/\n/\t/'

4. 数据转换

# CSV转TSV
sed 's/,/\t/g' data.csv

# 转换日期格式
sed -E 's/([0-9]{4})-([0-9]{2})-([0-9]{2})/\3\/\2\/\1/g' dates.txt

# URL编码解码(简单版本)
echo "hello world" | sed 's/ /%20/g'

5. 脚本文件使用

# 创建sed脚本
cat > script.sed << EOF
s/old/new/g
/^#/d
/^$/d
EOF

# 使用脚本文件
sed -f script.sed file.txt

常用组合技巧

1. 与管道配合

# 查找并替换
grep "pattern" file.txt | sed 's/old/new/g'

# 处理命令输出
ls -l | sed -n '2,$p' | awk '{print $9}'

2. 复杂文本处理

# 提取XML/HTML标签内容
sed -n 's/.*<title>\(.*\)<\/title>.*/\1/p' file.html

# 处理配置文件段落的示例
sed -n '/^\[database\]/,/^\[/p' config.ini | sed '/^\[/d'

这些 sed 命令用法涵盖了大多数日常文本处理需求,掌握它们可以高效地进行批量文本编辑和转换操作。