2017-8-13linux学习记录
2017-08-13 22:22
169 查看
bashrc 类
profile 类 两个都是初始化bash
了解 NFS网络文件系统 rpcbind
查看PATH(环境变量) echo $PATH
给系统添加环境变量的时候用 export ,由export关键字处理过的变量叫做环境变量, 使变量的值对当前shell的所有子进程都可见
#cat & #jobs 查看后台运行的程序
sed
sed处理文本文件时,首先会被读到模式空间中,而不修改原文件。sed可以对文本文件的所有行进行操作,也可以通过正则表达式进行匹配,使得sed可以只处理模式空间中的被正则表达式匹配到的行。
然后再判断模式空间中的文本是否会被正则表达式匹配到,如果匹配到,就会对匹配到的文本做编辑操作,之后再将被编辑的文本和没有被编辑的文本一同输出到标准输出 如果模式空间没有被正则表达式匹配到,直接将没有被匹配到的文本原样输出至标准输出
常用的选项
-n:不输出模式模式中的内容至屏幕,也就是不会将没有匹配到的文本输出到标准输出,只是输出编辑到的文本
#sed '1,2p' first 把1-2连同源文件打印出来
#sed -n '1,2p' first 打印1-2两行
[root@momo01 ~]# cat first
aaaaa
bbbbb
ccccc
[root@momo01 ~]# sed '1,2p' first
aaaaa
aaaaa
bbbbb
bbbbb
ccccc
[root@momo01 ~]# sed -n '1,2p' first
aaaaa
bbbbb
-e 脚本:可以指定多个脚本,实现多次编辑
-f 脚本文件: 每一行一个编辑命令
-i:直接修改原文件
-r: 表示使用扩展的正则表达式
执行删除命令时,不改变原文件 #sed '1,3d' first 删除文件first的1-3行
[root@momo01 ~]# sed '1,2d' first
ccccc
[root@momo01 ~]# cat first
aaaaa
bbbbb
ccccc
#sed -i '1,2d' first 修改原文件
[root@momo01 ~]# sed -i '1,2d' first
[root@momo01 ~]# cat first
ccccc
编辑命令 (与vim的末行模式类似)d命令是特例,需要特别注意,不能加-n选项
d: 删除,对应d命令而言,没有匹配到的文本是不会输出到标准输出的。例如:下面的sed对yhy文件进行处理,不会将没有匹配到文本的输出至标准输出,而是将编辑后的文本输出到标准输出
例如:
[root@7 ~]# cat yhy
111
222
333
444
[root@7 ~]# sed '1,3d' yhy
444
p: 打印
a\字符串: append 追加,在行后面追加字符串,支持使用\n实现多行追加
例如:sed '2a\xxx' /first:表示在第2行后面,也就是第3行插入xxx字符串,其后的行依次向下移动
[root@momo01 ~]# cat first
aaaaa
bbbbb
ccccc
[root@momo01 ~]# sed '2a\xxx' first
aaaaa
bbbbb
xxx
ccccc
i\字符串:在行前面插入字符串,支持使用\n实现多行插入
c\字符串:把匹配到的行替换为字符串
例如:sed '2c\yyy' first 将第2行替换为yyy字符串
[root@momo01 ~]# sed '2c\yyy' first
aaaaa
yyy
ccccc
w 文件路径:将匹配到的行重定向至指定的文件中
例如:sed '/^[^#]/w yhy.txt' /etc/fstab 将非井号开头的行保存至yhy.txt文件中
r 文件路径:读取指定文件的内容插入到当前文件被匹配到的行处
例如: sed '3r /etc/issue' /etc/fstab 将/etc/issue中的内容插入到/etc/fstab第3行的文本后面
=:表示被模式匹配到的行上面加上一个行号
[root@momo01 ~]# sed '/^b/=' first
aaaaa
2
bbbbb
ccccc
!:取反条件
例如:sed '/^c/!d' first 将不是以c开头的行删除
[root@momo01 ~]# sed '/^c/!d' first
ccccc
s///:查找替换,常用的有s@@@, s### ,
修饰符有:
g:全局替换,表示可以替换一行中多次匹配到的字符串。如果不加g,那么只能替换一行中第一次出现的字符串
w 文件路径:替换成功的结果保存至指定文件中
p :显示替换成功的行
sed [选项] 脚本 文件
[root@momo01 ~]# sed 's/b/a/g' first
aaaaa
aaaaa
ccccc
[root@momo01 ~]# sed 's/b/a/' first
aaaaa
abbbb
ccccc
[root@mom
9e7e
o01 ~]# sed 's/b/a/p' first
aaaaa
abbbb
abbbb
ccccc
练习题
0:sed 's/^\#//' /etc/first 删除以#号开头的行 不加地址定界符表示全文匹配,不加执行操作表示删除
1:删除/etc/grub2.cfg文件中所有的以空白字符开头的行的行首的所有空白字符
sed 's/^[[:space:]]\+//' /etc/grub2.cfg
2:删除/etc/fstab文件中所有以#开头的行的行首的#号且紧跟#号后面的所有空白字符
sed -r 's/^#[[:space:]]*//' /etc/fstab
3:输出一个绝对路径给sed命令,取出其文件名
echo "/var/log/messages" | sed -r 's#^.*/(.*)#\1#' 正确
echo "/var/log/messages" | sed -r 's/^.*/(.*)/\1/' 错误
echo "/var/log/messages" | sed 's/^.*\/\(.*\)/\1/' 正确, 不用扩展正则表达式
4:输出一个绝对路径给sed命令,取出其目录名,相当于dirname
echo "/var/log/messasdfasdf/" | sed -r 's#(.*)/.*#\1#'
sed与egrep都是对行进行处理, sed不仅能匹配到行,还能对文本进行处理
cut对字段(列)进行处理
sed -r 's/^[[:space:]]+//' first 删除空白字符(查找替换)
sed -r '/^[[:space:]]*$/d' first 删除空白行 (命令操作)
[root@momo01 ~]# cat first
aaaaa
bbbbb
ccccc
ddddd
[root@momo01 ~]# sed -r 's/^[[:space:]]+//' first
aaaaa
bbbbb
ccccc
ddddd
[root@momo01 ~]# sed -r '/^[[:space:]]*$/d' first
aaaaa
bbbbb
ccccc
ddddd
a=1
强引用 "echo $a" 输出 1
弱引用 'echo $a' 输出 $a
bash---shell
文件名用 .sh的方式,然后用 vi 或 vim 进入编辑模式
脚本语言文件格式:第一行 #!/bin/bash :定义bash脚本解释器
注释信息:#
编辑完保存退出之后,常用的运行shell脚本有两种方式
1, [root@momo01 ~]# ./first.sh
-bash: ./first.sh: 权限不够
[root@momo01 ~]# chmod +x first.sh
[root@momo01 ~]# ./first.sh
9
2, [root@momo01 ~]# bash first.sh
9
bash中支持的运算符以及变量赋值的表达时候
+ , - , * , / , % , **
1:let var=$var1+$var2
2:var=$[expression]:这里虽然expression是字符表
达式,但是通过 $[ ]之后就变成了算数运算, 例如:var=
$[ 1+2 ]
3:var=$(命令) 这里是将命令输出的结果赋值var变量
4:注意:乘法有些时候需要转义
5:let i=$i+1 等价于 let i+=# 等价于 let i++
let i=$i-1 等价于 let i-=# 等价于 let i--
例:
[root@momo01 ~]# a=2
[root@momo01 ~]# b=3
[root@momo01 ~]# c=$a+$b
[root@momo01 ~]# echo $c
2+3
[root@momo01 ~]# c=$[ $a+$b ]
[root@momo01 ~]# echo $c
5
[root@momo01 ~]# let c=$a+$b
[root@momo01 ~]# echo $c
5
1 .计算/etc/passwd文件中的第5个用户和第6个用户的id号之和
[root@momo01 ~]# sed -n '5p' /etc/passwd |cut -d: -f3
4
[root@momo01 ~]# sed -n '6p' /etc/passwd |cut -d: -f3
5
[root@momo01 ~]# vim first.sh
#!/bin/bash
uid5=$(sed -n '5p' /etc/passwd |cut -d: -f3)
uid6=$(sed -n '6p' /etc/passwd |cut -d: -f3)
c=$[$uid5+$uid6]
echo $c
[root@momo01 ~]# bash first.sh
9
profile 类 两个都是初始化bash
了解 NFS网络文件系统 rpcbind
查看PATH(环境变量) echo $PATH
给系统添加环境变量的时候用 export ,由export关键字处理过的变量叫做环境变量, 使变量的值对当前shell的所有子进程都可见
#cat & #jobs 查看后台运行的程序
sed
sed处理文本文件时,首先会被读到模式空间中,而不修改原文件。sed可以对文本文件的所有行进行操作,也可以通过正则表达式进行匹配,使得sed可以只处理模式空间中的被正则表达式匹配到的行。
然后再判断模式空间中的文本是否会被正则表达式匹配到,如果匹配到,就会对匹配到的文本做编辑操作,之后再将被编辑的文本和没有被编辑的文本一同输出到标准输出 如果模式空间没有被正则表达式匹配到,直接将没有被匹配到的文本原样输出至标准输出
常用的选项
-n:不输出模式模式中的内容至屏幕,也就是不会将没有匹配到的文本输出到标准输出,只是输出编辑到的文本
#sed '1,2p' first 把1-2连同源文件打印出来
#sed -n '1,2p' first 打印1-2两行
[root@momo01 ~]# cat first
aaaaa
bbbbb
ccccc
[root@momo01 ~]# sed '1,2p' first
aaaaa
aaaaa
bbbbb
bbbbb
ccccc
[root@momo01 ~]# sed -n '1,2p' first
aaaaa
bbbbb
-e 脚本:可以指定多个脚本,实现多次编辑
-f 脚本文件: 每一行一个编辑命令
-i:直接修改原文件
-r: 表示使用扩展的正则表达式
执行删除命令时,不改变原文件 #sed '1,3d' first 删除文件first的1-3行
[root@momo01 ~]# sed '1,2d' first
ccccc
[root@momo01 ~]# cat first
aaaaa
bbbbb
ccccc
#sed -i '1,2d' first 修改原文件
[root@momo01 ~]# sed -i '1,2d' first
[root@momo01 ~]# cat first
ccccc
编辑命令 (与vim的末行模式类似)d命令是特例,需要特别注意,不能加-n选项
d: 删除,对应d命令而言,没有匹配到的文本是不会输出到标准输出的。例如:下面的sed对yhy文件进行处理,不会将没有匹配到文本的输出至标准输出,而是将编辑后的文本输出到标准输出
例如:
[root@7 ~]# cat yhy
111
222
333
444
[root@7 ~]# sed '1,3d' yhy
444
p: 打印
a\字符串: append 追加,在行后面追加字符串,支持使用\n实现多行追加
例如:sed '2a\xxx' /first:表示在第2行后面,也就是第3行插入xxx字符串,其后的行依次向下移动
[root@momo01 ~]# cat first
aaaaa
bbbbb
ccccc
[root@momo01 ~]# sed '2a\xxx' first
aaaaa
bbbbb
xxx
ccccc
i\字符串:在行前面插入字符串,支持使用\n实现多行插入
c\字符串:把匹配到的行替换为字符串
例如:sed '2c\yyy' first 将第2行替换为yyy字符串
[root@momo01 ~]# sed '2c\yyy' first
aaaaa
yyy
ccccc
w 文件路径:将匹配到的行重定向至指定的文件中
例如:sed '/^[^#]/w yhy.txt' /etc/fstab 将非井号开头的行保存至yhy.txt文件中
r 文件路径:读取指定文件的内容插入到当前文件被匹配到的行处
例如: sed '3r /etc/issue' /etc/fstab 将/etc/issue中的内容插入到/etc/fstab第3行的文本后面
=:表示被模式匹配到的行上面加上一个行号
[root@momo01 ~]# sed '/^b/=' first
aaaaa
2
bbbbb
ccccc
!:取反条件
例如:sed '/^c/!d' first 将不是以c开头的行删除
[root@momo01 ~]# sed '/^c/!d' first
ccccc
s///:查找替换,常用的有s@@@, s### ,
修饰符有:
g:全局替换,表示可以替换一行中多次匹配到的字符串。如果不加g,那么只能替换一行中第一次出现的字符串
w 文件路径:替换成功的结果保存至指定文件中
p :显示替换成功的行
sed [选项] 脚本 文件
[root@momo01 ~]# sed 's/b/a/g' first
aaaaa
aaaaa
ccccc
[root@momo01 ~]# sed 's/b/a/' first
aaaaa
abbbb
ccccc
[root@mom
9e7e
o01 ~]# sed 's/b/a/p' first
aaaaa
abbbb
abbbb
ccccc
练习题
0:sed 's/^\#//' /etc/first 删除以#号开头的行 不加地址定界符表示全文匹配,不加执行操作表示删除
1:删除/etc/grub2.cfg文件中所有的以空白字符开头的行的行首的所有空白字符
sed 's/^[[:space:]]\+//' /etc/grub2.cfg
2:删除/etc/fstab文件中所有以#开头的行的行首的#号且紧跟#号后面的所有空白字符
sed -r 's/^#[[:space:]]*//' /etc/fstab
3:输出一个绝对路径给sed命令,取出其文件名
echo "/var/log/messages" | sed -r 's#^.*/(.*)#\1#' 正确
echo "/var/log/messages" | sed -r 's/^.*/(.*)/\1/' 错误
echo "/var/log/messages" | sed 's/^.*\/\(.*\)/\1/' 正确, 不用扩展正则表达式
4:输出一个绝对路径给sed命令,取出其目录名,相当于dirname
echo "/var/log/messasdfasdf/" | sed -r 's#(.*)/.*#\1#'
sed与egrep都是对行进行处理, sed不仅能匹配到行,还能对文本进行处理
cut对字段(列)进行处理
sed -r 's/^[[:space:]]+//' first 删除空白字符(查找替换)
sed -r '/^[[:space:]]*$/d' first 删除空白行 (命令操作)
[root@momo01 ~]# cat first
aaaaa
bbbbb
ccccc
ddddd
[root@momo01 ~]# sed -r 's/^[[:space:]]+//' first
aaaaa
bbbbb
ccccc
ddddd
[root@momo01 ~]# sed -r '/^[[:space:]]*$/d' first
aaaaa
bbbbb
ccccc
ddddd
a=1
强引用 "echo $a" 输出 1
弱引用 'echo $a' 输出 $a
bash---shell
文件名用 .sh的方式,然后用 vi 或 vim 进入编辑模式
脚本语言文件格式:第一行 #!/bin/bash :定义bash脚本解释器
注释信息:#
编辑完保存退出之后,常用的运行shell脚本有两种方式
1, [root@momo01 ~]# ./first.sh
-bash: ./first.sh: 权限不够
[root@momo01 ~]# chmod +x first.sh
[root@momo01 ~]# ./first.sh
9
2, [root@momo01 ~]# bash first.sh
9
bash中支持的运算符以及变量赋值的表达时候
+ , - , * , / , % , **
1:let var=$var1+$var2
2:var=$[expression]:这里虽然expression是字符表
达式,但是通过 $[ ]之后就变成了算数运算, 例如:var=
$[ 1+2 ]
3:var=$(命令) 这里是将命令输出的结果赋值var变量
4:注意:乘法有些时候需要转义
5:let i=$i+1 等价于 let i+=# 等价于 let i++
let i=$i-1 等价于 let i-=# 等价于 let i--
例:
[root@momo01 ~]# a=2
[root@momo01 ~]# b=3
[root@momo01 ~]# c=$a+$b
[root@momo01 ~]# echo $c
2+3
[root@momo01 ~]# c=$[ $a+$b ]
[root@momo01 ~]# echo $c
5
[root@momo01 ~]# let c=$a+$b
[root@momo01 ~]# echo $c
5
1 .计算/etc/passwd文件中的第5个用户和第6个用户的id号之和
[root@momo01 ~]# sed -n '5p' /etc/passwd |cut -d: -f3
4
[root@momo01 ~]# sed -n '6p' /etc/passwd |cut -d: -f3
5
[root@momo01 ~]# vim first.sh
#!/bin/bash
uid5=$(sed -n '5p' /etc/passwd |cut -d: -f3)
uid6=$(sed -n '6p' /etc/passwd |cut -d: -f3)
c=$[$uid5+$uid6]
echo $c
[root@momo01 ~]# bash first.sh
9
相关文章推荐
- 和菜鸟一起学linux之DBUS基础学习记录
- Smart210学习记录----beep linux字符设备驱动
- Linux学习记录(18)DNS服务基础
- linux命令学习记录
- 和菜鸟一起学linux之wifi学习记录基础知识
- Linux学习记录--磁盘挂载与卸载
- linux学习记录
- 和菜鸟一起学linux之bluez学习记录1
- 和菜鸟一起学linux之bluez学习记录2
- Linux学习记录(8)Linux基本权限设置
- Linux学习记录-基础记录
- linux学习记录--UNIX发展史和发行版本
- linux BogoMIPS学习记录
- 学习linux的好博客地址记录
- Linux学习记录-各个目录的作用
- Linux驱动学习记录 devfs_mk_cdev
- Linux MySql学习记录
- Linux学习之错误与解决记录(持续更新)
- Linux 常用命令学习记录
- 分享记录我的Linux系统入门学习经验