首页 > 系统相关 >Shell脚本编程基础(四)

Shell脚本编程基础(四)

时间:2024-09-22 10:24:14浏览次数:12  
标签:脚本 kiwi Shell grape 编程 cut awk print txt

五种常用文本工具和Crontab调度工具(一)

  1. cut: 用于从文本中提取特定的字段或列。
  2. grep: 用于搜索文本中的特定模式。
  3. awk: 用于处理和分析文本。
  4. sed: 用于文本替换和编辑。
  5. sort: 用于对文本行进行排序。

Crontab

Crontab 是用于定时任务调度的工具,可以用来定期执行脚本或命令。通过设定特定的时间表达式,来控制任务的执行频率。

这两类工具在功能和用途上有很大不同,但都在命令行环境中非常常用。

1. cut 命令

常用选项
  • -d <delimiter>: 指定字段分隔符。
  • -f <fields>: 指定要提取的字段。
文件 1 内容 (cut_example.txt)
apple banana
orange grape
kiwi lemon
melon berry
案例实操
  1. 切割 cut_example.txt 的第一列

    cut -d " " -f 1 cut_example.txt
    

    输出:

    apple
    orange
    kiwi
    melon
    
  2. 切割 cut_example.txt 的第二列

    cut -d " " -f 2 cut_example.txt
    

    输出:

    banana
    grape
    lemon
    berry
    
文件 2 内容 ( data.txt )
apple,10,red
banana,20,yellow
grape,30,purple
  1. 提取data.txt第二列和第三列:
cut -d ',' -f 2,3 data.txt

输出:

10,red
20,yellow
30,purple

2. sed 命令

常用选项
  1. a (append)

    • 在指定行后追加文本。
  2. d (delete)

    • 删除指定行。
  3. s (substitute)

    • 用于替换文本。
文件内容 (sed_example.txt)
apple banana
orange grape
kiwi lemon
melon berry
案例实操
  1. 在第三行下插入新行

    sed '3a fruit salad' sed_example.txt
    

    输出:

    apple banana
    orange grape
    kiwi lemon
    fruit salad
    melon berry
    
  2. 删除包含 kiwi 的行

    sed '/kiwi/d' sed_example.txt
    

    输出:

    apple banana
    orange grape
    melon berry
    
  3. melon 替换为 watermelon

    sed 's/melon/watermelon/' sed_example.txt
    

    输出:

    apple banana
    orange grape
    kiwi lemon
    watermelon berry
    

3. awk 命令

常用选项
  • -F <delimiter>: 指定输入字段分隔符。
  • -v <var=value>: 定义和传递外部变量。

正则表达式匹配:

  • /.*/ 匹配所有行。
  • /pattern/ 匹配包含 pattern 的行。
  • /^pattern/ 匹配以 pattern 开头的行。
  • /pattern$/ 匹配以 pattern 结尾的行。

条件判断:

  • $1 == "root":匹配第一个字段等于 "root" 的行。
  • $3 > 1000:匹配第三个字段大于 1000 的行。
案例1 文件内容 (/etc/passwd 示例)
root:x:0:0:root:/root:/bin/bash
user:x:1000:1000:User:/home/user:/bin/bash
  1. 搜索以 root 开头的所有行,并输出第7列

    awk -F: '/^root/{print $7}' /etc/passwd
    awk -F':' '\$1 == "root" {print \$7}' /etc/passwd
    

    输出:

    /bin/bash
    
  2. 输出第1列和第7列,中间以逗号分隔

    awk -F: '/^root/{print $1 "," $7}' /etc/passwd
    

    输出:

    root,/bin/bash
    
  3. 用户ID增加1并输出

    awk -v i=1 -F: '{print $3+i}' /etc/passwd
    

    输出:

    1
    1001
    
  4. 统计文件名、行号、列数

    awk -F: '{print "filename:" FILENAME ", linenumber:" NR ", columns:" NF}' /etc/passwd
    

    输出:

    filename:/etc/passwd, linenumber:1, columns:7
    filename:/etc/passwd, linenumber:2, columns:7
    
    1. FILENAME
      FILENAMEawk 的内置变量,表示当前正在处理的文件名。在这个例子中,它会输出 /etc/passwd

    2. NR
      NRawk 的内置变量,表示当前的行号。每读取一行记录,NR 将自动递增。

    3. NF
      NFawk 的内置变量,表示当前行的字段数。对于每一行,NF 会计算根据指定分隔符(这里是 :)分隔出来的字段数量。

  5. 提取 IP 地址

    ifconfig ens33 | grep "inet " | awk -F" " '{print $2}'
    

    输出: (假设 IP 为 192.168.1.102)

    192.168.1.102
    
案例2 假设 data.txt 内容为:
apple 10
banana 20
grape 30
kiwi 40
melon 50
  • 使用 -F 指定分隔符

    如果文件使用逗号分隔:

    awk -F ',' '{print $1, $2}' data.txt
    
  • 使用 -v 传递变量(不使用 -F 指定时默认使用空格分隔,cut 切割取第几列时需要考虑连续空格的第几个空格,而awk不需要考虑,多个连续空格会视为一个)

    找到数量大于某个值的水果:

    awk -v threshold=25 '{if ($2 > threshold) print $1, $2}' data.txt
    awk -v threshold=25 '$2 > threshold {print$1, $2}' data.txt
    

    输出:

    grape 30
    kiwi 40
    melon 50
    
  • 简单的计算

    计算每行的数量乘以2:

    awk '{print $1, $2 * 2}' data.txt
    

    输出:

    apple 20
    banana 40
    grape 60
    kiwi 80
    melon 100
    

标签:脚本,kiwi,Shell,grape,编程,cut,awk,print,txt
From: https://blog.csdn.net/m0_58076578/article/details/142346038

相关文章

  • Shell脚本编程基础(一)
    LinuxShell编程入门在Linux系统中,Shell是一个重要的工具,它充当应用程序与计算机内核的交互桥梁。本文将介绍Shell编程的一些基本知识,并通过实例帮助你更好地理解和使用它。什么是Shell?Shell是一种解释型的编程语言,通过解释器将代码翻译成计算机可理解的语言。在......
  • 全网最全挂机掘金脚本合集,单机一天壹张+无压力
    摘要本文介绍了一款功能丰富的挂机型脚本软件,该软件支持多种平台的自动化操作项目概述当前市场上,挂机型脚本软件种类繁多,功能齐全。本软件集成了多种平台的自动化脚本,包括微信阅读、卷轴平台、广告掘金、自动养机、短视频挂机等。用户只需下载一款软件,即可享受多达十几......
  • 全网最全挂机掘金脚本合集,单机一天壹张+无压力
    摘要本文介绍了一款功能丰富的挂机型脚本软件,该软件支持多种平台的自动化操作项目概述当前市场上,挂机型脚本软件种类繁多,功能齐全。本软件集成了多种平台的自动化脚本,包括微信阅读、卷轴平台、广告掘金、自动养机、短视频挂机等。用户只需下载一款软件,即可享受多达十几......
  • 一款批量下载 B 站动态页图片的脚本
    在逛B站的时候,总能看到不少UP会发很多图片,此时一个一个保存非常麻烦,而且文件名都是随机的字符串,还得手工重命名。为此,特地搜索了下有没相关的浏览器插件或油猴脚本,还真给我找到一个。脚本地址:https://greasyfork.org/zh-CN/scripts/421885​‍‍安装后,重新刷新网页,即可......
  • 在 WordPress 中排队 CSS 和 JS 脚本以获得更好的性能
    wordpress是开源软件–用户可以按照自己的意愿安装、修改和分发它。由于每个人都可以访问源代码,数百万wordpress专家和开发人员可以创建工具和扩展并与公众分享。让我们看看如何将css和js文件加入到你的wordpress项目中。大多数新开发者都喜欢,里面“header.php”<ti......
  • 动态编程变得简单:带有 JavaScript 示例的初学者指南
    通过javascript中的动态编程释放高效解决问题的能力。介绍您想提高编程中解决问题的能力吗?动态规划(dp)是一种强大的技术,可以帮助您高效地解决复杂问题。本初学者指南将通过javascript示例向您介绍动态编程,使其易于掌握并应用于实际场景。您将学到什么:动态规划的基本概念......
  • CTF-PWN-ret2shellcode全解
    ##入门级shellcode在平时遇到题目时候我们第一步查看保护,然后再根据反汇编的程序进行判断程序能够用哪种攻击方法入门级的shellcode肯定就是简单的看,但是那种无限制且可以直接执行的就不给大家讲了,那种是非常非常简单的了,首先给大家看一个例题:源码:保护:有新手会问,开启了nx......
  • 【油猴脚本】00011 案例 Tampermonkey油猴脚本,动态渲染表格-实现页面动态-添加提取数
    前言:哈喽,大家好,今天给大家分享一篇文章!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏+关注哦......
  • Java中的泛型编程:深入理解类型参数与类型边界的使用
    Java中的泛型编程:深入理解类型参数与类型边界的使用大家好,我是微赚淘客返利系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿!在Java中,泛型编程是一种重要的特性,它允许我们在编写代码时使用类型参数,从而提高代码的可重用性和类型安全性。本文将深入探讨Java中的泛型,包括类型参......
  • 带你0到1之QT编程:十五、探索QSplitter和QDockWidget的简单应用技巧
    此为QT编程的第十五谈!关注我,带你快速学习QT编程的学习路线!每一篇的技术点都是很很重要!很重要!很重要!但不冗余!我们通常采取总-分-总和生活化的讲解方式来阐述一个知识点!码农不易,各位学者学到东西请点赞支持支持!开始部分:总:QSplitter提供的是一种灵活的可拖拉布局方式来管......