ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

学习笔记之shell基础

2022-03-20 12:32:45  阅读:145  来源: 互联网

标签:shell 笔记 学习 Shell sed awk test txt root


Shell学习笔记

一、linux系统与shell环境准备

  1. linux的组成:

在这里插入图片描述

  1. linux内核:

在这里插入图片描述

  1. linux与Windows的区别:

在这里插入图片描述

  1. linux的文件目录:

在这里插入图片描述

  1. linux的基本命令:

    • ls:列出目录
    • cd:切换目录
    • pwd:显示目前的目录
    • mkdir:创建一个新的目录
    • rmdir:删除一个空的目录
    • cp:复制文件或目录
    • rm:移除文件或目录
    • mv:移动文件与目录,或修改文件与目录的名称
  2. Shell介绍可以和linux内核进行交互的工具

在这里插入图片描述

  • 常见的shell:
    • Bourne Shell (/usr/bin/sh或/bin/sh)
    • Bourne Again Shell (/bin/bash)
    • C Shell (/usr/bin/csh)
    • K Shell (/usr/bin/ksh)
    • Shell for Root (/sbin/sh)
      在这里插入图片描述

​ 图中第一行#! /bin/bash告诉操作系统使用的是bash Shell,第二行echo "hello"是让Shell输出一个hello。

  • 运行shell
    • chmod +x ./test.sh # 使脚本具有执行权限
    • /bin/sh test.sh

在这里插入图片描述

二、Linux三剑客与管道使用

  1. 管道、正则表达式、grep、sed、awk

在这里插入图片描述

  1. 管道 |

    Linux提供管道符“|”将两个命令隔开,管道符左边命令的输出就会作为管道符右边命令的输入

在这里插入图片描述

  • echo “hello1234” | grep “hello”
  1. 正则表达式
    • 正则表达式就是记录文本规则的代码
    • 演练环境:https://tool.oschina.net/regex

在这里插入图片描述

  • 举例:
    • 找出所有的 hi 单词 \bhi\b
    • hi 单词后面有Lucy单词 \bhi\b.*\blucy\b
    • 以0开头,然后是两个数字,然后是一个连字号“-”,最后是8个数字 0\d{2}-\d{8}

在这里插入图片描述
在这里插入图片描述

  • 练习:

    • 匹配以字母a开头的单词 \ba\w*\b
    • 匹配刚好6个字符的单词 \b\w{6}\b
    • 匹配1个或更多连续的数字 \d{1,} \d+
    • 5位到12位QQ号 ^\d{5,12}
  1. grep
    • 定义:根据用户指定的模式(pattern)对目标文本进行过滤,显示被模式匹配到的行
    • 命令形式:grep [OPTIONS] PATTERN [FILE…]
    • 选项:
      • -v 显示不被pattern匹配到的行
      • -i 忽略字符大小写
      • -n 显示匹配的行号
      • -c 统计匹配的行数
      • -o 仅显示匹配到的字符串
      • -E 使用ERE,相当于egrep
  • 实战1:
    • 查找文件内容包含root的行
      • grep -n root test.txt
    • 查找文件内容不包含root的行
      • grep -nv root test.txt
  • 实战2:
    • 查找以s开头的行
      • grep ^s test.txt
    • 查找以n结尾的行
      • grep n$ test.txt
  1. sed
    • 定义:sed是流编辑器,一次处理一行内容,只在模式空间中操作,不会改变原文件

在这里插入图片描述

  • 命令解析:

    • sed [-hn..][-e<script>] [-f<script文件>] [文本文件]
      • -h 显示帮助
      • -n仅显示script处理后的结果
    • sed [-hnV] [-e<script>] [-f<script文件>] [文本文件]
      • -e<script> 以选项中指定的script来处理输入的文本文件
      • -f<script> 以选项中指定的script文件来处理输入的文本文件
  • 常用动作:

    • a:新增 sed -e ‘4 a newline’ 在第4行后面增加一行,内容newline
    • c:取代 sed -e ‘2,5c No 2-5 number’ 使用c后面的内容去取代2-5行的内容
    • d:删除 sed -e ‘2,5d’ 删除2-5行
    • i:插入 sed -e ‘2i newline’ 在第二行前面插入新的一行,内容newline
    • p:打印 sed -n ‘/root/p’ 打印带root的内容,p指打印
    • s:取代 sed -e ‘s/old/new/g’ 用新的内容new取代旧的old的内容,s代表取代,g代表全局,有多个的匹配时候,可以在末尾加g替换每一个匹配的关键字,否则只替换每行的第一个
  • 实战1:

    • 查看帮助

      • man sed 使用j 和 k 上下翻页,j向下翻页,k向上翻页
      • sed -h
    • 在第四行后添加新字符串

      • sed -e ‘4 a newline testfile’ test.txt
        在这里插入图片描述
        实战2:
  • 在第二行后加上 newline

    • sed ‘2a drink tea’ test.txt
  • 在第二行前加上newline

    • sed ‘2i drink tea’ test.txt
      在这里插入图片描述
      实战3:
  • 全局替换

    • sed -e ‘s/root/hello/g’ test.txt
  • 直接修改文件内容

    • sed -i ‘s/root/hello/g’ test.txt
      在这里插入图片描述
      在这里插入图片描述
  1. awk

    • 定义:把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行后续处理。

在这里插入图片描述

  • 命令形式:awk ‘pattern + action’ [FILE]

  • awk ‘pattern + action [filenames]’

    • -pattern 正则表达式
    • -action 对匹配到的内容执行的命令(默认为输出每行内容)
  • 常用参数:

    • FILENAME:awk浏览的文件名
    • BEGIN:处理文本之前要执行的操作
    • END:处理文本之后要执行的操作
    • FS:设置输入域分隔符,等价于命令行 -F选项
    • NF:浏览记录的域的个数(列数)
    • NR:已读的记录数(行数)
    • OFS:输出域分隔符
    • ORS:输出记录分隔符
    • RS:控制记录分隔符
    • $0:整条记录
    • $1:表示当前行的第一个域……依次类推
  • 实战1:

  • 搜索/etc/passwd有关root关键字的所有行,并显示对应的shell

    • awk -F: ‘/root/{print $7}’ /etc/passwd
  • 打印/etc/passwd/的第二行信息

    • awk -F: ‘NR==2{print $0}’ /etc/passwd
      在这里插入图片描述
  • 实战2:

  • 使用begin加入标题

    • awk -F: ‘BEGIN {print “BEGIN”,“BEGIN”}{print $1,$2}’ /etc/passwd
  • 自定义分隔符

    • echo “111 222|333 444|555 666”|awk ‘BEGIN{RS="|"}{print $0}’

    在这里插入图片描述
    在这里插入图片描述

  • 实战三:取出文件中指定列并写入到一个新文件

    • awk -F “|” ‘BEGIN {print “merc_id,”,“amount,”,“stl_amt,”,“fee,”}{OFS=","}{print $4,$12,$13,$14}’ ./test20210628_000001.txt > test_20210628.csv

    • 对当前文件夹下的test20210628_000001.txt文件执行:将文件内容以"|“分割,首行打印表头,数据分隔符为”,",打印第4、12、13、14列,并将内容写入到新文件test_20210628.csv。
      在这里插入图片描述

标签:shell,笔记,学习,Shell,sed,awk,test,txt,root
来源: https://blog.csdn.net/fye700/article/details/123610412

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有