linux+shell基础语法

文章目录

    • 一.Linux系统
      • 1.1查看文件指定行,统计行数
      • 1.2查看文件状态(stat)
      • 1.3 top
      • 1.4 系统硬件配置查询
      • 1.5 权限
    • 二.Shell基础
      • 2.1 变量
        • 2.1.1 定义变量
        • 2.1.2 使用变量
        • 2.1.3 系统变量
        • 2.1.4 数组变量
        • 2.1.5 字符串变量
        • 2.1.6 特殊符号的使⽤
        • 2.1.7 删除变量
      • 2.2基本运算符
        • 2.2.1算术运算符
        • 2.2.2关系运算符
        • 2.2.3布尔运算符
        • 2.2.4逻辑运算符
        • 2.2.5字符串运算符
        • 2.2.6文件测试运算符
      • 2.3逻辑控制
        • 2.3.1 If结构
        • 2.3.2 case ... esac (选学)
        • 2.3.3 for循环
        • 2.3.4 While 循环
        • 2.3.5 until 循环(选学)
        • 2.3.6退出控制
        • 2.3.7 Shell 输⼊输出
      • 2.4脚本
        • 2.4.1 函数
        • 2.4.2 传参
    • 三.linux三剑客
      • 3.1 grep
      • 3.2 awk
        • 3.2.1awk简介
        • 3.2.2调用awk
        • 3.2.2选项参数
        • 3.2.3基本操作
        • 3.2.4运算符
        • 3.2.5、内建变量
        • 3.2.6、使用正则表达式
      • 3.3 sed
        • 3.3.1 sed的使用方法
        • 3.3.2sed的常用选项
        • 3.3.3sed中的编辑命令

一.Linux系统

带你真正认识Linux 系统结构:https://www.linuxprobe.com/linux-system-structure.html

1.1查看文件指定行,统计行数

head -2 test.txt
tail -2 test.txt
head -4 test.txt|tail -2

wc -l test.txt#查看行数
wc -w test.txt#查看单词
wc -c test.txt#查看字符

1.2查看文件状态(stat)

  • Access Time:简写为atime,表示文件的访问时间。当文件内容被访问时,更新这个时间
  • Modify Time:简写为mtime,表示文件内容的修改时间,当文件的数据内容被修改时,更新这个时间。
  • Change Time:简写为ctime,表示文件的状态时间,当文件的状态被修改时,更新这个时间,例如文件的链接数,大小,权限,Blocks数。

1.3 top

动态查看系统的整体运行

1.4 系统硬件配置查询

  • ifconfig
  • cat /proc/cpuinfo :查看CPU信息processor
  • df -h :查看硬盘/dev/vda1
  • free -m :查看内存
  • date

1.5 权限

Linux下文件的权限类型一般包括读,写,执行。对应字母为 r(4)、w(2)、x(1)。
Linux下权限的属组有 拥有者(u) 、群组(g) 、其它组(o) 三种。每个文件都可以针对这三个属组(粒度),设置不同的rwx(读写执行)权限。

-rw------- (600)    只有拥有者有读写权限。
-rw-r--r-- (644)    只有拥有者有读写权限;而属组用户和其他用户只有读权限。
-rwx------ (700)    只有拥有者有读、写、执行权限。
-rwxr-xr-x (755)    拥有者有读、写、执行权限;而属组用户和其他用户只有读、执行权限。
-rwx--x--x (711)    拥有者有读、写、执行权限;而属组用户和其他用户只有执行权限。
-rw-rw-rw- (666)    所有用户都有文件读、写权限。
-rwxrwxrwx (777)    所有用户都有读、写、执行权限。

chmod +x abc:给所有用户添加执行的权限
chmod a+r abc:给所有用户添加读的权限
chmod -R 777 abc:给文件夹和子文件的所有用户赋予读写执行权限

二.Shell基础

shell是系统的用户界面,提供了用户与内核进行交互操作的一种接口。它接收用户输入的命令并把它送入内核去执行,是一个命令解释器。另外,shell编程语言具有普通编程语言的很多特点,用这种编程语言编写的shell程序与其他应用程序具有同样的效果。

目前主要有下列版本的shell。

  • Bourne Shell:是贝尔实验室开发的。

  • BASH:是GNU的Bourne Again Shell,是GNU操作系统上默认的shell,大部分linux的发行套件使用的都是这种shell。

  • Korn Shell:是对Bourne SHell的发展,在大部分内容上与Bourne Shell兼容。

  • C Shell:是SUN公司Shell的BSD版本。

2.1 变量

  • 变量定义和逻辑控制,是⼀门语⾔的基本
  • 变量不需要定义,可以直接使

2.1.1 定义变量

变量名的命名须遵循如下规则:

命名只能使用英文字母,数字和下划线,首个字符不能以数字开头。
中间不能有空格,可以使用下划线 _。
不能使用标点符号。

  • var=“xxx”。= 左右不要有空格。需要的时候,必须⽤”或 者’括起来
  • 也可以使⽤命令的输出作为变量的内容 var=`ls`。$() 与反引号类似

2.1.2 使用变量

  • 使⽤$var 或 ${var}来访问变量。后者更为严谨。$var_x ${var}_x 是不同的。
  • 变量不需要定义也可以使⽤。引⽤未定义的变量,默认为空值。

2.1.3 系统变量

  • echo $PWD
  • echo $USER
  • echo $HOME
  • echo $PATH

2.1.4 数组变量

使⽤()来定义数组变量,中间使⽤空格隔开
array=(1 2 3 4 5 6)

#读取数组元素
echo ${array[2]}
#读取整个数组
echo ${array[*]} 
#或者
echo ${array[@]} 
#取得数组单个元素的长度
echo ${#array[*]}
#或者
echo ${#array[@]} 

2.1.5 字符串变量

#提取子字符串
string="runoob is a great site"
# 输出 unoo
echo ${string:1:4} 
#获取字符串长度
echo ${#string}
#${#array[*]}和${#array[@]}表⽰数组中元素的个数

#字符串拼接--将两个字符串并排放在一起就能实现拼接
name="Shell"
url="http://www.baidu.com/shell/"
#**中间不能有空格**($name $url)
str1=$name$url  
str2="$name $url"  #如果被双引号包围,那么中间可以有空格
str3=$name": "$url  #中间可以出现别的字符串
str4="$name: $url"  #这样写也可以
str5="${name}Script: ${url}index.html"  #这个时候需要给变量名加上大括号
echo $str1
echo $str2
echo $str3
echo $str4
echo $str5

2.1.6 特殊符号的使⽤

  • ‘’ 以单引号’ '包围变量的值时,单引号里面是什么就输出什么,即使内容中有变量和命令(命令需要反引起来)也会把它们原样输出。
  • “” 以双引号" "包围变量的值时,输出时会先解析里面的变量和命令,而不是把双引号中的变量名和命令原样输出。
  • \ 反斜线,某些情况下表⽰转义。
  • $(ls) 表⽰执⾏ls后的结果。与``类似。不过可以嵌套
  • `反引号。⽤法⽐较独特,代表命令的输出
  • $(()) (())对整数进行运算, 获 取 运 算 结 果 , 可 以 进 行 变 量 操 作 。 ⽐ 如 相 加 获取运算结果,可以进行变量操作。⽐如相加 ((a+b))

2.1.7 删除变量

unset var

2.2基本运算符

Shell 和其他编程语言一样,支持多种运算符,包括:

  • 算数运算符
  • 关系运算符
  • 布尔运算符
  • 字符串运算符
  • 文件测试运算符
    原生bash不支持简单的数学运算,但是可以通过其他命令来实现,例如 awk 和 expr,expr 最常用。

expr 是一款表达式计算工具,使用它能完成表达式的求值操作。

2.2.1算术运算符

表列出了常用的算术运算符,假定变量 a 为 10,变量 b 为 20:

运算符 说明 举例
+ 加法 expr $a + $b 结果为 30。
- 减法 expr $a - $b 结果为 -10。
* 乘法 expr $a \* $b 结果为 200。
/ 除法 expr $b / $a 结果为 2。
% 取余 expr $b % $a 结果为 0。
= 赋值 a=$b 把变量 b 的值赋给 a。
== 相等。用于比较两个数字,相同则返回 true。 [ $a == $b ] 返回 false。
!= 不相等。用于比较两个数字,不相同则返回 true。 [ $a != $b ] 返回 true。

注意:条件表达式要放在中括号之间,并且要有空格,例如: [ a = = a== a==b] 是错误的,必须写成 [ $a == $b ]。

2.2.2关系运算符

关系运算符只支持数字,不支持字符串,除非字符串的值是数字。

下表列出了常用的关系运算符,假定变量 a 为 10,变量 b 为 20:

运算符 说明 举例
-eq 检测两个数是否相等,相等返回 true。 [ $a -eq $b ] 返回 false。
-ne 检测两个数是否不相等,不相等返回 true。 [ $a -ne $b ] 返回 true。
-gt 检测左边的数是否大于右边的,如果是,则返回 true。 [ $a -gt $b ] 返回 false。
-lt 检测左边的数是否小于右边的,如果是,则返回 true。 [ $a -lt $b ] 返回 true。
-ge 检测左边的数是否大于等于右边的,如果是,则返回 true。 [ $a -ge $b ] 返回 false。
-le 检测左边的数是否小于等于右边的,如果是,则返回 true。 [ $a -le $b ] 返回 true。

2.2.3布尔运算符

下表列出了常用的布尔运算符,假定变量 a 为 10,变量 b 为 20:

运算符 说明 举例
! 非运算,表达式为 true 则返回 false,否则返回 true。 [ ! false ] 返回 true。
-o 或运算,有一个表达式为 true 则返回 true。 [ $a -lt 20 -o $b -gt 100 ] 返回 true。
-a 与运算,两个表达式都为 true 才返回 true。 [ $a -lt 20 -a $b -gt 100 ] 返回 false。

2.2.4逻辑运算符

以下介绍 Shell 的逻辑运算符,假定变量 a 为 10,变量 b 为 20:

运算符 说明 举例
&& 逻辑的 AND [[ $a -lt 100 && $b -gt 100 ]] 返回 false
|| 逻辑的 OR [[ $a -lt 100

2.2.5字符串运算符

下表列出了常用的字符串运算符,假定变量 a 为 “abc”,变量 b 为 “efg”:

运算符 说明 举例
= 检测两个字符串是否相等,相等返回 true。 [ $a = $b ] 返回 false。
!= 检测两个字符串是否不相等,不相等返回 true。 [ $a != $b ] 返回 true。
-z 检测字符串长度是否为0,为0返回 true。 [ -z $a ] 返回 false。
-n 检测字符串长度是否不为 0,不为 0 返回 true。 [ -n “$a” ] 返回 true。
$ 检测字符串是否为空,不为空返回 true。 [ $a ] 返回 true。

2.2.6文件测试运算符

文件测试运算符用于检测 Unix 文件的各种属性。

操作符 说明 举例
-b file 检测文件是否是块设备文件,如果是,则返回 true。 [ -b $file ] 返回 false。
-c file 检测文件是否是字符设备文件,如果是,则返回 true。 [ -c $file ] 返回 false。
-d file 检测文件是否是目录,如果是,则返回 true。 [ -d $file ] 返回 false。
-f file 检测文件是否是普通文件(既不是目录,也不是设备文件),如果是,则返回 true。 [ -f $file ] 返回 true。
-g file 检测文件是否设置了 SGID 位,如果是,则返回 true。 [ -g $file ] 返回 false。
-k file 检测文件是否设置了粘着位(Sticky Bit),如果是,则返回 true。 [ -k $file ] 返回 false。
-p file 检测文件是否是有名管道,如果是,则返回 true。 [ -p $file ] 返回 false。
-u file 检测文件是否设置了 SUID 位,如果是,则返回 true。 [ -u $file ] 返回 false。
-r file 检测文件是否可读,如果是,则返回 true。 [ -r $file ] 返回 true。
-w file 检测文件是否可写,如果是,则返回 true。 [ -w $file ] 返回 true。
-x file 检测文件是否可执行,如果是,则返回 true。 [ -x $file ] 返回 true。
-s file 检测文件是否为空(文件大小是否大于0),不为空返回 true。 [ -s $file ] 返回 true。
-e file 检测文件(包括目录)是否存在,如果是,则返回 true。 [ -e $file ] 返回 true。

2.3逻辑控制

  • 条件 if
  • 分⽀ case
  • 循环 for while until select
  • && ||
  • Break 和 continue

2.3.1 If结构

  • if [ condition ] ; then …;fi
  • if [ condition ] ; then …;else …;fi
  • if [ condition ] ; then …;elif …;fi
  • if [ condition ] ; then …;elif …;else …;fi
  • 简单的逻辑可以使⽤ && || 去替代
#单行语句一般要用到分号来区分代码块
#若写作多行,用换行符来区分代码块,则无需用到分号
a=10
b=20
if [ $a == $b ]
then
   echo "a 等于 b"
elif [ $a -gt $b ]
then
   echo "a 大于 b"
elif [ $a -lt $b ]
then
   echo "a 小于 b"
else
   echo "没有符合的条件"
fi

2.3.2 case … esac (选学)

case … esac 为多选择语句,与其他语言中的 switch … case 语句类似,是一种多分支选择结构,每个 case 分支用右圆括号开始,用两个分号 ;; 表示 break,即执行结束,跳出整个 case … esac 语句,esac(就是 case 反过来)作为结束标记。

case … esac 语法格式如下:

casein
模式1)
    command1
    command2
    ...
    commandN
    ;;
模式2)
    command1
    command2
    ...
    commandN
    ;;
esac

示例:

#!/bin/sh
site="runoob"
case "$site" in
   "runoob") echo "菜鸟教程"
   ;;
   "google") echo "Google 搜索"
   ;;
   "taobao") echo "淘宝网"
   ;;
esac

2.3.3 for循环

  • bash shell支持C式for循环
for((i=0;i<10;i++)); 
do   
echo $i ; 
done
  • For 遍历循环

⽤于迭代数组,还可以迭代以空格隔开的字符串序列。或者是某个命令的返回值。

for f in $array[*]; 
dodone

#示例:
ss="aa bb cc dd";for x in $ss;do echo $x ;done 
for x in \`ls\` ;do echo  $x ;done 
ss=(aa bb cc "sss dd");for x in "${ss[@]}";do echo $x ;done

2.3.4 While 循环

while 循环用于不断执行一系列命令,也用于从输入文件中读取数据。

#语法格式为:
while condition
do
    command
done



#实例1
#!/bin/bash
int=1
while(( $int<=5 ))
do
    echo $int
    let "int++"
done

#let 命令的替代表示形式是: ((算术表达式))

#实例2
echo '按下  退出'
echo -n '输入你最喜欢的网站名: '
while read FILM
do
    echo "是的!$FILM 是一个好网站"
done

2.3.5 until 循环(选学)

until 循环执行一系列命令直至条件为 true 时停止。

until 循环与 while 循环在处理方式上刚好相反。

#语法格式为:
until condition
do
    command
done


#实例
#!/bin/bash

a=0
until [ ! $a -lt 10 ]
do
   echo $a
   a=`expr $a + 1`
done

#expr整数运算

2.3.6退出控制

  • return 函数返回
  • exit 脚本退出
  • break 退出当前循环
  • continue 跳过当前循环,进入下一次循环

Shell 中的 break 和 continue 却能够跳出多层循环,也就是说,内层循环中的 break n和 continue n 能够跳出外层循环。

#!/bin/bash
while :
do
    echo -n "输入 1 到 5 之间的数字:"
    read aNum
    case $aNum in
        1|2|3|4|5) echo "你输入的数字为 $aNum!"
        ;;
        *) echo "你输入的数字不是 1 到 5 之间的! 游戏结束"
            break
        ;;
    esac
done


#!/bin/bash
while :
do
    echo -n "输入 1 到 5 之间的数字: "
    read aNum
    case $aNum in
        1|2|3|4|5) echo "你输入的数字为 $aNum!"
        ;;
        *) echo "你输入的数字不是 1 到 5 之间的!"
            continue
            echo "游戏结束"
        ;;
    esac
done

2.3.7 Shell 输⼊输出

  • Read ⽤来读取输⼊,并赋值给变量
  • echo ,printf可以简单输出变量。
  • > file 将输出重定向到另⼀个⽂件
  • >> 表⽰追加 等价于tee -a
  • < file 输⼊重定向 (wc -l < 1.txt显示行数)
  • | 表⽰管道,也就是前⼀个命令的输出传⼊下⼀个命令 的输

2.4脚本

2.4.1 函数

# return后跟数值n(0-255),返回的是状态码
[ function ] funname [()]

{

    action;

    [return int;]

}


#!/bin/bash
funWithParam(){
    echo "第一个参数为 $1 !"
    echo "第二个参数为 $2 !"
    echo "第十个参数为 $10 !"
    echo "第十个参数为 ${10} !"
    echo "第十一个参数为 ${11} !"
    echo "参数总数有 $# 个!"
    echo "作为一个字符串输出所有参数 $* !"
}
funWithParam 1 2 3 4 5 6 7 8 9 34 73
#注意,$10 不能获取第十个参数,获取第十个参数需要${10}。当n>=10时,需要使用${n}来获取参数。



  • Function 可以省略。除了可以在脚本⽂件中使⽤函数外, 还可以shell中定义。这些定义会在本次shell结束后消失。
  • 如果没有return,返回值是最后⼀句指令的返回值。

2.4.2 传参

  • $0 表⽰执⾏的程序,是相对于执⾏⽬录的路径
  • $1 ,$2 ,$3 分别表⽰第⼏个参数。默认shell只⽀持9个参数
  • $@,$* 表⽰所有的参数,不含$0

三.linux三剑客

3.1 grep

#大小写不同意义不同
grep -A 
grep -B
grep -C
#忽略大小写
grep -i
#查看压缩文件
zgrep 
zcat

3.2 awk

3.2.1awk简介

awk其名称得自于它的创始人 Alfred Aho 、Peter Weinberger 和 Brian Kernighan 姓氏的首个字母。实际上 AWK 的确拥有自己的语言: AWK 程序设计语言 , 三位创建者已将它正式定义为“样式扫描和处理语言”。它允许您创建简短的程序,这些程序读取输入文件、为数据排序、处理数据、对输入执行计算以及生成报表,还有无数其他的功能。

awk是以文件的一行为处理单位的。awk每接收文件的一行,然后执行相应的命令,来处理文本

3.2.2调用awk

  • awk [选项参数] ‘script’ var=value file(s)
  • awk [选项参数] -f scriptfile var=value file(s)

3.2.2选项参数

  • -F fs or –field-separator fs
    如果不加-F指定,则以空格或者tab为分隔符
    指定输入文件折分隔符,fs是一个字符串或者是一个正则表达式,如-F:

  • -v var=value or –asign var=value
    赋值一个用户定义变量。

  • -f scripfile or –file scriptfile
    从脚本文件中读取awk命令。

  • -mf nnn and -mr nnn
    对nnn值设置内在限制,-mf选项限制分配给nnn的最大块数目;-mr选项限制记录的最大数目。这两个功能是Bell实验室版awk的扩展功能,在标准awk中不适用。

  • -W compact or –compat, -W traditional or –traditional
    在兼容模式下运行awk。所以gawk的行为和标准的awk完全一样,所有的awk扩展都被忽略。

  • -W copyleft or –copyleft, -W copyright or –copyright
    打印简短的版权信息。

  • -W help or –help, -W usage or –usage
    打印全部awk选项和每个选项的简短说明。

  • -W lint or –lint
    打印不能向传统unix平台移植的结构的警告。

  • -W lint-old or –lint-old
    打印关于不能向传统unix平台移植的结构的警告。

  • -W posix
    打开兼容模式。但有以下限制,不识别:/x、函数关键字、func、换码序列以及当fs是一个空格时,将新行作为一个域分隔符;操作符和=不能代替=;fflush无效。

  • -W re-interval or –re-inerval
    允许间隔正则表达式的使用,参考(grep中的Posix字符类),如括号表达式[[:alpha:]]。

  • -W source program-text or –source program-text
    使用program-text作为源代码,可与-f命令混用。

  • -W version or –version
    打印bug报告信息的版本。

3.2.3基本操作

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-laeo2aKc-1649323121090)(https://boostnote.io/api/teams/dlm1ZMj21/files/b45453d37e548ff9bb2f84babebb2a28ad8c021c3e76dd578c2fb65a13108fff-1089507-20170126222420597-662074402.jpg)]

#分割。

last -n 5 |awk '{print $1}'
awk -F":" '{ print $1 }' /etc/passwd
awk -F":" '{ print $1 $3 }' /etc/passwd
awk -F":" '{ print $1 " " $3 }' /etc/passwd
awk -F":" '{ print "username: " $1 "\t\tuid:" $3" }' /etc/passwd


#赋值一个用户定义变量-v。


#log.txt文本内容如下:

#2 this is a test
#3 Are you like awk
#This's a test
#10 There are orange,apple,mongo

$ awk -va=1 '{print $1,$1+a}' awktest.txt
$ awk -va=1 -vb=s '{print $1,$1+a,$1b}' awktest.txt


3.2.4运算符

运算符 描述
= += -= *= /= %= ^= **= 赋值
?: C条件表达式
&& 逻辑与
~ 和 !~ 匹配正则表达式和不匹配正则表达式
< <= > >= != == 关系运算符
空格 连接
+ - 加,减
* / % 乘,除与求余
+ - ! 一元加,减和逻辑非
^ *** 求幂
++ – 增加或减少,作为前缀或后缀
$ 字段引用
in 数组成员
#过滤第一列大于2的行:
$ awk '$1>2' log.txt    #命令
#过滤第一列大于2并且第二列等于’Are’的行:
$ awk '$1>2 && $2=="Are" {print $1,$2,$3}' awktest.txt    

3.2.5、内建变量

变量 描述
$n 当前记录的第n个字段,字段间由FS分隔
$0 完整的输入记录
ARGC 命令行参数的数目
ARGIND 命令行中当前文件的位置(从0开始算)
ARGV 包含命令行参数的数组
CONVFMT 数字转换格式(默认值为%.6g)ENVIRON环境变量关联数组
ERRNO 最后一个系统错误的描述
FIELDWIDTHS 字段宽度列表(用空格键分隔)
FILENAME 当前文件名
FNR 各文件分别计数的行号
FS 字段分隔符(默认是任何空格)
IGNORECASE 如果为真,则进行忽略大小写的匹配
NF 一条记录的字段的数目
NR 已经读出的记录数,就是行号,从1开始
OFMT 数字的输出格式(默认值是%.6g)
OFS 输出字段分隔符,默认值与输入字段分隔符一致。
ORS 输出记录分隔符(默认值是一个换行符)
RLENGTH 由match函数所匹配的字符串的长度
RS 记录分隔符(默认是一个换行符)
RSTART 由match函数所匹配的字符串的第一个位置
SUBSEP 数组下标分隔符(默认值是/034)
# 输出顺序号 NR, 匹配文本行号
awk '{print NR,FNR,$1,$2,$3}' awktest.txt

# 指定输出分割符
awk '{print $1,$2,$5}' OFS=" $ "  awktest.txt

3.2.6、使用正则表达式

# 输出第二列包含 "th",并打印第二列与第四列
awk '$2 ~ /th/ {print $2,$4}' awktest.txt

#'~,!~'表示指定变量与正则表达式匹配(代字号)或不匹配(代字号、感叹号)的条件语句

awk参考资料

3.3 sed

sed是Linux下一款功能强大的非交互流式文本编辑器,可以对文本文件进行增、删、改、查等操作,支持按行、按字段、按正则匹配文本内容,灵活方便,特别适合于大文件的编辑

3.3.1 sed的使用方法

  • 在命令行指定sed指令对文本进行处理:sed +选项 ‘指令’ 文件

  • 先将sed指令保存到文件中,将该文件作为参数进行调用:sed +选项 -f 包含sed指令的文件 文件

3.3.2sed的常用选项

-r:使用扩展正则表达式

-e:它告诉sed将下一个参数解释为一个sed指令,只有当命令行上给出多个sed指令时才需要使用-e选项

-f:后跟保存了sed指令的文件

-i:直接对内容进行修改,不加-i时默认只是预览,不会对文件做实际修改

-n:取消默认输出,sed默认会输出所有文本内容,使用-n参数后只显示处理过的行

3.3.3sed中的编辑命令

  • a:追加 向匹配行后面插入内容

  • c:更改 更改匹配行的内容

  • i:插入 向匹配行前插入内容

  • d:删除 删除匹配的内容

  • s:替换 替换掉匹配的内容

  • p:打印 打印出匹配的内容,通常与-n选项和用

示例1:向文件中添加或插入行

sed '3ahello' sedtest.txt   #向第三行后面添加hello,3表示行号
sed '/123/ahello' sedtest.txt #向内容123后面添加hello,如果文件中有多行包括123,则每一行后面都会添加
示例2:更改文件中指定的行


sed  '1chello'  sedtest.txt  #将文件1.txt的第一行替换为hello

sed  '/123/chello'  sedtest.txt  #将包含123的行替换为hello

示例3:删除文件中的行
sed  '4d'  sedtest.txt    #删除第四行
sed   '1,2d'  sedtest.txt   #删除1~2行

sed   '/123\|abc/!d'  sedtest.txt    #删除不匹配123或abc的行,/123\|abc/ 表示匹配123或abc ,!表示取反

示例4:替换文件中的内容

sed  's/123/hello/'   sedtest.txt   #将文件中的123替换为hello,默认只替换每行第一个123

sed  's/123/hello/g'  sedtest.txt #将文本中所有的123都替换为hello

示例5:打印文件中的行

sed  -n '3p'  sedtest.txt   #打印文件中的第三行内容
sed  -n '3,$p'  sedtest.txt  #打印从第3行到最后一行的内容

sed  -n '/123/p'  sedtest.txt   #逐行读取文件,打印匹配you的行

示例6:修改文件中的行并生效
sed -i '/123/ahello' sedtest.txt

你可能感兴趣的:(linux,shell,ssh,bash)