当前位置: 首页 > news >正文

相似命令对比

awk 命令用法表格

场景命令示例说明示例输入文件内容 (input.txt)输出结果
1. 基础字段提取awk -F: '{print $1}' /etc/passwd按分隔符提取第1列(如用户名)。root:x:0:0:root:/root:/bin/bashroot
2. 多字段组合输出awk -F: '{print $1, $3, $7}' /etc/passwd提取第1、3、7列并用空格分隔。同上root 0 /bin/bash
3. 条件过滤行awk -F: '$3 >= 1000 {print $1}' /etc/passwd输出UID(第3列)≥1000的用户名。user1:x:1000:1000:User One:/home/user1:/bin/bashuser1
4. 数值计算awk '{sum += $1} END {print sum}' numbers.txt计算第1列数值的总和。10<br>20<br>3060
5. 条件统计awk -F: '$7 == "/bin/bash" {count++} END {print count}' /etc/passwd统计使用 /bin/bash 的用户数。同场景12(假设有2个用户使用bash)
6. 数组去重统计awk '{a[$0]++} END {for (i in a) print i, a[i]}' duplicates.txt统计每行出现次数并去重。apple<br>banana<br>appleapple 2<br>banana 1
7. 自定义分隔符awk -F, '{print $2}' data.csv按逗号分隔CSV文件并提取第2列。John,Doe,25<br>Jane,Smith,30Doe<br>Smith
8. 格式化输出awk -F: 'BEGIN {OFS=":"} {print $1, "NEW", $3}' /etc/passwd修改输出分隔符为冒号,并在第2列插入NEW同场景1root:NEW:0
9. 匹配正则表达式awk '/error/ {print}' logfile.txt输出包含error的行。[INFO] Started<br>[ERROR] Failed[ERROR] Failed
10. 多条件组合awk -F: '$3 > 500 && $7 == "/bin/bash" {print $1}' /etc/passwd输出UID>500且使用bash的用户名。
操作符作用示例
<输入重定向(文件 → 命令)cat < mail.txt
<<Here Document(多行输入)read a b << EOF 1 2 EOF
<<<Here String(单行输入)grep "word" <<< "text"
`>`强制覆盖输出(即使存在 noclobber
场景操作符示例是否需要空格
[ ] 字符串比较=[ "$var" = "value" ]
[[ ]] 字符串比较==[[ "$var" == "value" ]]建议加
变量赋值=var="value"

awk处理文本时,读文件前、读取文件内容中、读文件后后这三个环节是如何表示的?

  • BEGIN{ } 文件前处理:awk没有读入行之前 要执行的动作; 一般对数据作初始化操作,可以单独使用。
  • { } 行处理:对awk读入的每一行进行处理,可以单独使用。
  • END{ }文件后处理:awk 把所有的行都处理完后要执行的动作,一般输出数据处理的结果。可以单独使用。

sort 命令用法表格

选项说明示例输出说明
无选项按字典序(ASCII 顺序)对行排序sort file.txt按行首字母顺序排列
-n按数值大小排序(而非字典序)sort -n numbers.txt数值从小到大排序
-r逆序排序(降序)sort -r file.txt字典序或数值的逆序
-k指定排序的列(字段)sort -k2 file.csv按第 2 列排序(需配合 -t 指定分隔符)
-t指定字段分隔符(默认空白字符)sort -t: -k3 /etc/passwd/etc/passwd 的第 3 列(UID)排序
-u去除重复行(保留唯一行)sort -u duplicates.txt输出无重复的行
-o将排序结果输出到文件(而非标准输出)sort file.txt -o sorted_file.txt将排序结果保存到 sorted_file.txt
-V按版本号排序(支持 1.10 排在 1.2 之后)sort -V versions.txt适用于软件版本号排序
-f忽略大小写差异sort -f mixedcase.txtAppleapple 视为相同
-M按月份名称排序(如 JanFebsort -M months.txt按月份顺序排列

[[ ]][ ] 是 shell 脚本中用于条件测试的两种语法结构,但它们在功能、安全性和灵活性上有显著区别。以下是两者的核心对比和详细说明:


1. 语法与功能差异

特性[[ ]][ ](传统 test 命令)
支持的运算符支持逻辑运算符 &&、`
单词拆分与引号处理变量中的空格不会被拆分,无需额外引号(如 [[ $var == *txt ]] 安全)。未加引号的变量可能导致单词拆分或通配符意外展开(如 [ $var = *.txt ] 可能报错)。
正则表达式匹配支持 =~ 运算符进行正则匹配(如 [[ $str =~ ^[0-9]+$ ]])。不支持正则表达式,需结合 expr 或外部工具(如 grep)。
变量为空时的安全性空变量或未定义变量不会导致语法错误(如 [[ $var == "" ]] 安全)。空变量可能导致语法错误(如 [ $var = "" ] 会报 [: =: unary operator expected)。
兼容性Bash、Zsh、Ksh 等现代 shell 支持,非 POSIX 标准。所有 POSIX 兼容 shell(如 Dash、Bash 的 POSIX 模式)均支持。


3. 何时使用哪种语法?

场景推荐语法原因
现代 Bash/Zsh 脚本[[ ]]更安全、功能更丰富,避免转义和引号问题。
需要兼容 POSIX shell(如 Dash)[ ]确保脚本在最小化环境中运行(如 Docker 的 /bin/sh 可能是 Dash)。
简单数值比较[ ]在兼容性优先的场景中,[ ] 的语法更通用(如 [ "$a" -eq "$b" ])。
复杂字符串/正则匹配[[ ]][[ ]] 支持通配符和正则表达式,代码更简洁。

4. 注意事项

  • [[ ]] 是 Bash 扩展:在非 Bash 环境中(如 sh)可能不可用。
  • [ ]test 命令的别名:等价于 test "$a" = "$b",但需严格遵循语法。
http://www.xdnf.cn/news/323983.html

相关文章:

  • 华为云API、SDK是什么意思?有什么区别和联系?
  • 如何在sheel中运行Spark
  • ClimateCatcher专用CDS配置教程
  • 携手高校科研团队,共建TWS耳机芯片技术新生态
  • linux下的Redis的编译安装与配置
  • 夸克网盘链接失效检测工具
  • 多模态大语言模型arxiv论文略读(六十三)
  • 分区器(2)
  • 【Python】通过`Editable Install`模式详解,解决Python开发总是import出错的问题
  • spring ioc实现原理
  • Linux NVIDIA 显卡驱动安装指南(适用于 RHEL/CentOS)
  • 低代码 x AI,解锁数智化应用的创新引擎
  • Spark-Core(RDD行动算子)
  • C++回调函数学习
  • C++回顾 Day5
  • VRM Add-on for Blender 学习笔记
  • 如何测试 esp-webrtc-solution_solutions_doorbell_demo 例程?
  • C++ 继承
  • 文章记单词 | 第68篇(六级)
  • Synthetic Data Kit:LLM微调的语料提炼方案
  • iPhone 和 Android 在日期格式方面的区别
  • 前端日常 · 移动端网页调试
  • c++混淆工具Hikari-LLVM15-llvm-18.1.8rel编译安装
  • Android 蓝牙开发调试总结
  • 多模态学习(一)——从 Image-Text Pair 到 Instruction-Following 格式
  • Java学习手册:数据库事务相关知识
  • 护照阅读器简介
  • 算法导论第7章思考题
  • 16.Three.js 中的 RectAreaLight 全面详解 + Vue 3 实战案例
  • 动态规划之01背包——三道题助你理解01背包