基本命令+环境变量+正则表达式 --- shell脚本编程教程之一

2023-05-16

# vim !$
单纯的使用vi查看文件

shell 编程常见的命令:

alias : 别名 给一长命令起别名

例如:alias myssh="ssh root@192.168.1.158"

# myssh

相当于 : ssh root@192.168.1.158

取消myssh别名:

unalias myssh


通配符: * []  ?

# ls *

# 1.txt  2.txt

# ls [12].txt     // 中括号里面的表示任选其一

# ls ?.txt         // 只表示一个


重定向:

>    >>   <  2>  2>>    

2>     错误重定向

2>>   追加错误重定向

例如:

管道: |

# ls | Xargs

前面命令的输出 作为管道后面的输入


jobs  fg


变量:

env : 可以列出当前用户的所有变量(全局的)

env | grep "^a" 从管道中列出以a开头的变量  ^ 表示以什么开头

a=1  shell编程不能有空格

变量名不能以数字开头

变量名的组成:大小写字母(Aa)  数字(1 2 3) 下划线(_)     数字不能开头

有特殊符号 需要单引号(' ')  或者双引号(" ") 引起来

单引号 的为例更大

 a="ubuntu linux"

反引号 ``

程序对比

b=`echo $a`

c='echo $a'

d="echo"

然后,可以对比b,c,d的结果 有什么不同

变量可以叠加:

b=$a"123"

c=$a$b

d=$a123  // 将a123看作了一个整体


取消一个变量:

# unset a


echo $PS1

定义命令行的 固定开头的东西

.  == source   使文件生效

su -   // 重新登录root用户


wc 查看行数


cut :用于分割

cut -d  ':' -f 2 /etc/passwad

cut -c 2-5 /etc/passwd


sort  排序

 



wc 统计行数 单词 字符数
wc -l 4.txt 行数
cat -A 2.txt 可以将空格打印出来

line=`wc -l 4.txt | cutr -d ' ' -f2`;echo $line

uniq -c 将重复的行统计出来
cat 1.txt | tee 1.log 重定向到屏幕和1.log文件
tr 将字目进行转换
ls 1.txt | tr 'a-z' 'A-Z'

分割:
for i in `seq 1 10000` ; do cat /etc/passwd >> 1.txt ; done

du -sb /etc/passwd

split -l 10000 1.txt #将1.txt文件分割成10000行的多个文件

qplit -b 1M 1.txt    #按照1M进行分割1.txt文件

ls * | xargs -i mv {} {}.txt #统一添加后缀名 i 表示一行一行输出

cd /tmp && ls   #&&两个命令全部执行 并且第一个命令执行成功则执行后边的命令

cd /tmp || ls   # || 或的关系 第一个执行不成功 则后边的命令可以执行

cd /tmp ; ls     # ; 两个命令都执行 不管成功与否

正则表达式

grep egrep

grep -c 'mysql' 1.txt 统计1.txt的mysql的次数
grep -n --color 'root' 1.txt  显示行号 显示颜色
grep -o 'root' 1.txt | wc -l 统计次数
alias grep='grep --color' 输入麻烦 起别名
grep 'root'
grep -v root' 1.txt 取反
grep -A2 -n 'root' 1.txt 把下面的两行打印出来
grep -B2 -n 'root' 1.txt   上
grep -C2 -n 'root' 1.txt   上下
grep -r 'root' /etc/      遍历一个目录下的所有文件

表示数字: [0-9]
grep '^#' -n 1.txt 列出所有以#开头的行
grep 'n$' -n 1.txt 列出所有以n结尾的行
grep '^$' -n 1.txt 列出空行
grep -n '^[a-zA-Z]' 1.txt 列出所有以字母开头的行
grep -n '^[^0-9]' 1.txt  非数字开头的列

正则表达式中的特殊符号
* . ? + {} \

grep 'ro*t' 1.txt     # * 表示0个或多个*前面的字符
grep 'ro.t' 1.txt     # . 表示任意一个字符
grep -E 'ro?t' 1.txt  # ? 表示0个或1个?前面的字符
grep -E 'ro+t' 1.txt  # + 表示1个或多个+前面的字符
grep  'ro.*t' 1.txt   # .* 表示统配 贪婪匹配    

o* (oo)*
grep -E "(oo){2}" 1.txt 匹配出现2次或者2次以上的

查找/替换:sed
sed '1p' -n 1.txt                  # 打印第一行
grep -n '.*' 1.txt | sed '1,5p' -n # 打印1-5行 并打印
grep -n '.*' 1.txt | sed '/root/p' -n # 输出包含root的行
grep -n '.*' 1.txt | sed '/ro*t/p' -n
grep -n '.*' 1.txt | sed '/ro\+t/p' -n    ==  grep -n '.*' 1.txt | sed -r '/ro+t/p' -n
grep -n '.*' 1.txt | sed '/ro\?t/p' -n    ==  grep -n '.*' 1.txt | sed -r '/ro?t/p' -n

grep -n '.*' 1.txt | sed -e '/root/p' -e'/mysql/p' -n  包含root或者mysql  # 先匹配root如果包含输出 再去mysql如果包含mysql继续输出 如果一个行即包含root2baohan mysql 则输出2次 == grep -n '.*' 1.txt | sed '/root/p;/mysql/p' -n
grep -n '.*' 1.txt | sed '/ro[o|t]t/p' -n # 中括号三选一 即 o | t
sed 删除
grep -n '.*' 1.txt | sed '1,5d' 删除1-5行
grep -n '.*' 1.txt | sed -r '/[0-9]/d' 删除所有含有数字的行
grep -n '.*' 1.txt | sed -r '/[^0-9]/d'删除所有数字开头的行
sed 替换
grep -n '.*' 1.txt | sed 's/root/toor/g' 将root替换成toor
grep -n '.*' 1.txt | sed '1,10s/root/toor/g' 将1-10行进行替换
grep -n '.*' 1.txt | sed 's/[0-9]//g'   删除数字
grep -n '.*' 1.txt | sed 's/[^0-9]//g'  删除非数字
head 1.txt | sed -r 's/([^:]+)(:.*:)([^:]+$)/\3\2\1/' 使用-r不用转义
             将一行分割    1     2     3     /将前边的1,2,3部分使用'\'进行随意的调换顺序

sed -i 's/([^:]+)(:.*:)([^:]+$)/\3\2\1/' 1.txt 可以同时修改文本(-i)

awk -F ':' # : 分隔符
awk -F 'sbin' '{print $2}' 1.txt  以sbin为分隔符 输出第二个
awk -F ':' '$1~/root/' 1.txt      有分隔符之后可以精准匹配
                                  分割出来的第一部分含有root的

awk -F ':' '$1~/root/ {print $3,$4}' 1.txt 匹配之后打印第3,4部分
awk -F ':' '1~/root/ {print $0}' 1.txt     $0 表示整行
awk -F ':' '$1~/root/ {OFS="#";print $1,$2}' 1.txt
            条件       输出的分隔符
awk -F ':' '$1=="root" {print $1,$2}' 1.txt 严格匹配 第一部分等于root
"或者"的条件
awk -F ':' '$1=="root" || NR>30 {print $1,$2}' 1.txt # NR>30 大于30行
                      # || 表示或者 $1等于root 或者 行号大于30行
"并且"的条件
awk -F ':' '$1=="root" && NR>30 {print $1,$2}' 1.txt
                      # && 表示并且 $1等于root 并且行号大于30

awk -F ':' '$1=$3+$4 {print}' 1.txt
                      # 第1部分=第3部分+第4部分 替换掉第一部分

awk -F ':' 'NF>3 && NF<10 {print}' 1.txt  # NF 分割的段数
awk -F ':' '$1=1 {OFS=":"; print $0}' 1.txt # 将第1段进行替换 结构发生了改变 需要重新指定分隔符

awk -F ':' '{OFS="####";print $NR,$NF}' 1.txt # NR行数 NF段数

正则表达式的要点:
'.'  a.
'*'  a* == a aa aaa ....
'+'  grep -E 'a+' == grep 'a\+'
'?'  grep -E 'a?' == grep 'a\?'
'.*'
()   
|    grep -E 'a|b' 或者

{}   grep -E '(oo){2}' 出现2次
([^:]+) 非冒号 一个或多个
(:.*:)  从第一个冒号到最后一个冒号
([^:]+$)非冒号
sed -r '/([^:]+)(:.*:)([^:]+$)/\3\2\1' 1.txt 第1个和最后1个交换
 
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

基本命令+环境变量+正则表达式 --- shell脚本编程教程之一 的相关文章

  • linux内核的并发与竞态

    并发与竞态是指多个任务单元同时访问同一个资源 xff0c 就会出现并发 xff0c 竞态的现象 其中多个任务单元包括中断 xff0c 进程 线程 xff0c 甚至多个多处理器 xff1b 同一资源既包含硬件资源 xff0c 也包括软件数据
  • UDP通信

    头文件 xff1a 1 pragma once 2 3 include lt stdio h gt 4 include lt unistd h gt 5 include lt string h gt 6 include lt stdlib
  • 交叉编译找不到stdio.h头文件,make menuconfig问题解决办法

    今天测试交叉编译器总出现问题 xff0c fatal error stdio h No such file or directory 后来根据指导使用编译命令 xff1a arm linux gcc src c I 头文件路径 能编译通过
  • 原子上下文,进程上下文,中断上下文的详细解析

    内核空间和用户空间是现代操作系统的两种工作模式 xff0c 内核模块运行在内核空间 xff0c 而用户态应用程序运行在用户空间 它们代表不同的级别 xff0c 而对系统资源具有不同的访问权限 内核模块运行在最高级别 xff08 内核态 xf
  • server,gtk,tslib

    一 首先先说下framebuffer xserver tslib gtk和桌面这五者之间的联系 xff0c 1 framebuffer 即linux系统的一块内存区域 xff0c 往这块区域写东西屏幕就会有所显示 对应的设备文件是dev f
  • 修改启动logo,禁止光标

    linux内核下使用的图片文件类型是pnm和PPm格式的 xff0c 所以在开始介绍修改linux内核启动LOGO之前 xff0c 1 先需要介绍一下怎么样设计自己开始logo的ppm图片 xff0c 首先选择一张png格式的图片 xff0
  • 移植gtk,这个配置有点早,可以了解一下他的工作流程

    最近一直GTK xff0c 感觉好晕 整整耗了我近三天才勉强在网络资料和他人帮助情况下完成 所以记录一下 xff0c 不然我记性太差 xff0c 很可能下班之前就忘了 xff01 以后也好有个参考 首先注意一个问题 xff1a GTK在编译
  • error: ISO C90 forbids mixed declarations and code [-Werror=declaration-after-statement]

    这个错误多为编写linux驱动程序时出现的错误 xff0c 正常情况下是以警告出现的 xff0c 一般有两种情况 xff1a 1 在函数体内 xff0c 定义变量代码前边出现非定义的变量 此变量在其他地方已经定义了 xff0c 编译时就会出
  • 用户空间的虚拟地址如何转换得到实际的物理地址

    思路 xff1a 进程号是一个进程在用户空间的唯一标示 xff0c 所以 xff0c 根据pid可以从内核中得到一个进程的所有信息 xff0c 另外就是知道虚拟地址就可以通过内核物理地址映射到虚拟地址的逆运算就可以还原他的实际物理地址 以上
  • ubuntu系统下的minicom串口/usb转串口配置

    1 安装minicom串口软件 sudo apt get install minicom 2 配置串口 minicom默认配置是tty8 如果你直接使用的就是串口 xff0c 那么安装好之后就可以直接使用了 如果你是用usb转串口 xff0
  • Install ncurses (ncurses-devel) and try again.

    主要就是终端图形配置时最容易出现的问题 xff0c 比如最常见的make menuconfig xff0c 解决方法 xff1a sudo apt get install ncurses devel 屏幕弹出 xff1a 找不到这个软件 x
  • ioremap/mmap的几个测试结论

    环境 xff1a pc机 xff0c ubuntu 14 04 64位 xff0c 物理机 arm板 omap3530 xff0c 1G内存 xff0c 内核linux 2 6 32 1 mmap在pc机上测试映射大小 xff0c 可以将文
  • Freertos的钩子函数

    何谓钩子函数 xff1f 大多数操作系统 xff0c 如 xff1a windows linux ucos freertos 其实都有钩子函数 xff0c 能干什么呢 xff1f 其实就是操作系统留给开发者的一个回调函数 xff0c 具体有
  • fopen :invalid argument错误

    今天使用文件操作函数 xff1a fopen fread fwrite fclose时 xff0c 编译正常通过了 xff0c 但是运行时就爆出了invalid argument错误 FILE fp 61 fopen 34 a txt 34
  • jiffies:内核中的时间观念

    jiffies在内核中是一个全局变量 xff0c 声明包含在 include lt linux jiffies h gt 中 xff0c 几个内核中常用的的概念 xff1a 1 HZ 内核常量 ARM架构HZ 61 100 X86架构HZ
  • git 学习之一

    注 xff1a 这篇博文是本人在学习git软件时 xff0c 自己整理出来的 xff0c 对于git软件的知识点层次分明 xff0c 举例实用 xff0c 最主要的是自己的亲身学习经历 xff0c 还可以作为工具手册 xff0c 哪一点不清
  • git 学习之二

    1 git创建版本库 创建一个版本库非常简单 xff0c 首先 xff0c 选择一个合适的地方 xff0c 创建一个空目录 xff1a mkdir learngit cd learngit pwd Users michael learngi
  • linux环境的sd卡格式化,分区

    环境 xff1a ubuntu xff0c 大sd卡 我们买过来的sd卡 xff0c 插到电脑上 xff0c 安装好sd卡的驱动之后 xff0c 就会在我的电脑里面开到可移动磁盘 xff0c 实际上我们看到的这个可移动磁盘可用空间就是sd卡
  • 详解:tslib移植arm全过程

    环境 xff1a Ubuntu xff0c 交叉编译器 xff0c tslib 1 4 移植步骤 xff1a 第一步 xff1a 获取tslib的源码 使用git获取tslib源码 xff1a git clone https github
  • 根文件系统的制作,busybox编译以及中间遇到的问题

    软件环境 xff1a Ubuntu 14 10 busybox 1 10 编译配置 xff1a ARCH 61 arm CROSS COMPILE 61 arm linux make defconfig 或者 make menuconfig

随机推荐

  • selected device is not a touchscreen I understand

    具体tslib的移植在上一篇博客中已经做了详细的说明 xff1a http blog csdn net hpu11 article details 53105947 最近两天一直在做tslib移植触摸屏校准问题 xff0c 在经过tslib
  • error while loading shared libraries : libts-0.0.so.0:cannot open shared object file: No such file o

    这是我在运行自己写的qt程序时 xff0c 爆出的错误 xff0c 从错误的地方来看 xff0c 是我们的库中缺少一个libts 0 0 so 0的动态库 xff0c 如果开发经验比较丰富的人都会知道这个库是tslib的一个库 xff0c
  • ldd 查看可执行文件所依赖的库有哪些

    ldd是linux下的一个脚本命令 xff0c 我们可以通过各种途径去查找它 xff0c 作用 xff1a 打印可执行文件依赖的库 举个实用的例子 xff1a ehome是我自己写的一个只能家具的程序 xff0c 然后经过交叉编译得到的一个
  • FreeRTOS源码下载及源码文件夹介绍

    FreeRTOS源码下载及源码文件夹介绍 1 FreeRTOS源码下载 去官网或其他途径找到下载程序 xff0c 在这里 xff0c 我直接使用了正点原子提供的下载程序 xff1a 双击上图程序后 xff0c 选择存放路径 xff0c 下载
  • Linux如何手动挂载/卸载u盘

    1 首先你得保证你的U盘的格式是fat格式 先进入 mnt 目录新建一个usb目录 cd mnt mkidr usb 2 先fdisk l xff0c 然后插上U盘 xff0c fdisk l 查看是否有新的硬盘添加上来了 xff1f 最好
  • 写一个简单脚本文件判断文件的存在性

    实现代码一 1 2 3 4 5 6 7 8 9 10 1
  • 触摸屏与usb鼠标同时支持

    最近 xff0c 做系统移植 xff0c 根文件系统自己做的 xff0c 移植好tslib xff0c 也可以触摸屏校准 xff0c 触摸屏也可以正常使用 xff0c 但是插上usb鼠标时 xff0c 系统能枚举出usb的信息 xff0c
  • 内核裁剪和部分选项的意义

    嵌入式驱动开发 xff0c 内核开发 xff0c 都避免不了的和Linux打交道 xff0c 尤其是做系统移植 xff0c 在编译内核的时候 xff0c 我们都需要把没用的内核模块给删除掉 xff0c 以减少内核的文件大小 xff0c 这当
  • printk打印级别输出

    内核的打印函数和用户空间的打印函数是相同的 xff0c 只是关键字不太一样 xff0c 内核是printk xff0c 而用户空间则是printf 在内核空间只不过有一个打印级别的设置 xff0c 所谓的打印级别不过是几个宏定义 print
  • 结构体,联合的位域定义方法,以及结构体大小的计算

    结构体有一种定义方式叫做位域定义方式 xff0c 如下 struct ctl register int a 16 char c 4 这种定义方法 xff0c 一般常用在嵌入式开发的内核层的代码中经常出现 int a 16 代表a只占int的
  • c语言中__attribute__的意义

    微信搜索关注公众号 郑州行疆户外 了解软件工程师的业余户外生活 我们在进行定义数据结构计算数据结构大小的时候 xff0c 或者进行网络通讯的socket发送数据的时候 xff0c 都会遇到一个共同的问题 xff1a 数据对齐问题 这个问题是
  • linux播放音乐,录音命令-----arecord,aplay

    微信搜索关注公众号 郑州行疆户外 了解软件工程师的业余户外生活 用了这么长时间的Linux系统 xff0c 是不是还没有用Linux听过音乐 xff0c 一般使用Linux系统的人都是纯属办公需要或者自己对软件开发玩的 xff0c 很少是做
  • Unix或Linux中&、jobs、fg、bg等命令的使用方法

    fg bg jobs amp ctrl 43 z都是跟系统任务有关的 xff0c 虽然现在基本上不怎么需要用到这些命令 xff0c 但学会了也是很实用的 一 amp 最经常被用到 这个用在一个命令的最后 xff0c 可以把这个命令放到后台执
  • linux tftp服务器搭建与测试

    1 安装tftp服务器 sudo apt get install tftp hpa tftpd hpa tftp hpa是客户端 tftpd hpa是服务器端 2 配置tftp服务器 sudo vim etc default tftpd h
  • FreeRTOS基础知识

    FreeRTOS任务特性 xff1a 简单 xff1b 没有使用限制 xff1b 支持抢占 xff1b 支持优先级 xff1b 每个任务都有堆栈 xff0c 但也导致了RAM使用量增大 xff1b 如果使用强化在哪的话必须仔细考虑重入的问题
  • makeinfo 安装

    环境 ubuntu sudo apt get install texinfo 就OK 今天在打包的时候有个包需要 makeinfo 当时就各种搜结果就没有 makeinfo 这个软件包 xff0c 最后看到有人说其实就是 texinfo 这
  • 通过MCU实现Altera FPGA在线升级

    一 xff0e 问题背景 在实际工程应用中 xff0c 我们时常会遇到为解决某个老产品的BUG xff0c 需要在工程现场更新设备的FPGA代码 xff0c 或者参加电信测试时需要现场升级设备FPGA程序以便于调试 公司现阶段所用的Alte
  • ubuntu linux zip和unzip类命令详解

    微信搜索关注公众号 郑州行疆户外 了解软件工程师的业余户外生活 1 zip zip r myfile zip 将当前目录下的所有文件和文件夹全部压缩成myfile zip文件 xff0d r表示递归压缩子目录下所有文件 2 unzip un
  • ubuntu运行sh脚本sudo自动输入密码

    微信搜索关注公众号 郑州行疆户外 了解软件工程师的业余户外生活 示例 xff1a sudo apt get update 第一种方法 xff1a 使用管道 xff08 上一个命令的 stdout 接到下一个命令的 stdin xff09 b
  • 基本命令+环境变量+正则表达式 --- shell脚本编程教程之一

    vim 单纯的使用vi查看文件 shell 编程常见的命令 xff1a alias 别名 给一长命令起别名 例如 xff1a alias myssh 61 34 ssh root 64 192 168 1 158 34 myssh 相当于