Linux学习笔记(day03)

1.查看文件内容

查看小文件: cat、head、tail

查看大文件: less

(1)查看小文件: cat

语法: cat [选项] 文件名

  • cat -n 文件名: 由1开始对输出的所有行编号

(2)查看文件开头: head

查看文件开头几行,默认前十行

语法: head [选项] 文件名

  • head -n 数字 文件名: 查看文件前n行内容 

(3)查看文件结尾: tail

查看文件结尾几行,默认后十行

语法: tail [选项] 文件名

  • tail -n 数字 文件名: 查看文件后n行内容
  • tail -f 文件名: 查看实时更新的文件内容(一般查看日志,输出更新的内容)

(4)查看大文件: less

不会加载整个文件,先加载一个屏幕,再往下不断地加载

语法: less [选项] 文件

  • less -m : 显示文件百分比
  • less -N : 显示每行的行号

在文件内的操作命令:

/ : 向下搜索字符串

? : 向上搜索字符串

n : 重复前一个搜索操作

N : 反向重复前一个操作

j : 向下滚动一行

k : 向上滚动一行

G : 跳转到文件最后一行

g : 跳转到文件第一行

q : 退出

 2.linux三剑客

(1)行筛选 : grep

文本搜索工具,可以使用正则表达式进行文本搜索,并且把搜索到的数据打印到屏幕上

①语法 : grep [选项] '搜索的字符串' 文件名

  • grep -i : 不区分大小写
  • grep -v : 反向选择,即显示出没有'搜索字符串'内容的那一行
  • grep -n : 输出行号

②搜寻字符串 : 可以完全匹配字符串,也可以使用正则字符串,利用正则匹配

正则表达式主要参数 : 

\ : 忽略正则表达式中特殊字符的原有含义

^ : 匹配正则表达式的行首

$ : 匹配正则表达式的行尾

[ - ] : 范围,如[A-Z],即A、B、C一直到Z都符合要求

. : 表示任意单个字符,如a..b,a12b,aabb都可以

* : 表示有0个或多个某个字符。

# 创建grepf1文件,内容如下
vi grepf1
# 结果
aabbccaa
ddaamm
bbddee
hello world
one world
one dream

# 筛选带有aa的行
grep aa grepf1
# 结果
aabbccaa
ddaamm

# 筛选不带有aa的行
grep -v aa grepf1
# 结果
bbddee
hello world
one world
one dream

# 筛选以a开头的行
grep ^a grepf1
aabbccaa

# 筛选以a结尾的行
grep a$ grepf1
aabbccaa

# 筛选a-c范围的行
grep [a-c] grepf1
aabbccaa
ddaamm
bbddee

# 筛选a+任意单个字符+b
grep a.b grepf1
aabbccaa

grep ab. grepf1
aabbccaa

# b之前,a可以是0或多个(em,俺也许应该可以理解成既满足左开右闭(a,b]又满足全闭[a,b]波)
# *在中间,*左边的闭
grep a*b grepf1
aabbccaa
bbddee

# a之后,b可以是0或多个(em,那这里是,[a,b)或者[a,b])
# *在结尾,*左边的闭
grep ab* grepf1
aabbccaa
ddaamm
one dream

(2)列筛选 : awk

可以根据指定分隔符筛选列的数据

语法: awk [-F '分隔符'] '{print $n[, $n]}' 文件名
其中:
分隔符: 默认分隔符是 空格键 或 tab 键,可以不用-F指定
按照指定的 $n 获取指定列的数据,$n如下:
$0: 表示所有列
$1: 表示第一列
$n: 表示第n列
示例:
# 查看第一列
awk '{print $1}' awkf2
# 查看第一列和第七列
awk '{print $1,$7}' awkf2
# 查看所有列
awk '{print $0}' awkf2

示例:

(3)搜索替换文件 : sed

①搜寻文件内容

sed搜寻文件语法:
# 搜寻文件中第N行的数据
sed -n 'Np' 文件名
# 搜寻文件中第N1到N2行的数据
sed -n 'N1,N2p' 文件名
# 搜寻文件中包含字符串sss行的数据
sed -n '/sss/p' 文件名

示例:
# 查看第五行数据
sed -n '5p' ipfile
# 查看第五到第十行数据
sed -n '5,10p' ipfile
# 查看包含link字符串的行数据
sed -n '/link/p' ipfile

②搜寻替换文件内容

# 语法:
#------模拟替换------
# 全局搜索对应的字符串进行替换,并将替换后的内容输出到屏幕(不修改文件内容)
sed 's/搜索的字符串/替换的字符串/g' 文件名

# 搜索N1到N2行中对应的字符串进行替换,并将替换后的内容输出到屏幕(不修改文件内容)
sed 'N1,N2 s/搜索的字符串/替换的字符串/g' 文件名

#------真正替换------
# 全局搜索对应的字符串进行替换,文件内容修改
sed -i 's/搜索的字符串/替换的字符串/g' 文件名

# 搜索N1到N2行中对应的字符串进行替换,文件内容修改
sed -i 'N1,N2 s/搜索的字符串/替换的字符串/g' 文件名

# 删除(d)文件带有bad的数据
sed '/bad/d' 文件名

示例:

 需求: 想把每一行的第一个h和第二个h替换成H

# 需求: 想把每一行的第一个h和第二个h替换成H
# 执行多条sed命令需要加-e
[root@linux-54602 ~]# cat sed
hello world
hello flume hello hadoop
hello linux
hello hbase
hello hive hello spark

[root@linux-54602 ~]# sed -e 's/h/H/1' -e 's/h/H/2' sed
Hello world
Hello flume hello Hadoop
Hello linux
Hello hbase
Hello hive Hello spark
# 原因:
执行完第一个sed命令的结果: Hello flume hello hadoop
用上面的结果去执行第二个命令得到的结果: Hello flume hello Hadoop

# 解决:
[root@linux-54602 ~]# sed -e 's/h/H/1' -e 's/h/H/1' sed
Hello world
Hello flume Hello hadoop
Hello linux
Hello Hbase
Hello Hive hello spark

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值