Linux文件内容相关命令
Posted fqh202
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux文件内容相关命令相关的知识,希望对你有一定的参考价值。
文件内容相关
新增内容
vim
模式化编辑器、全屏编辑器
centos7安装vim:yum -y install vim
三种模式
- 1、编辑模式,打开vim后默认的模式,没卵用;
- 2、插入模式,直接可以修改文本内容;
3、末行模式,可以使用命令操作文本内容:
:10d 删除第10行 :10,20d 删除第10行-20行
模式之间转换:
编辑模式 --> 输入模式:
i 在当前光标所在字符前面进入输入模式 a 在当前光标所在字符后面进入输入模式 o 在当前光标所在行的下方新建一行,并转换为输入模式 I 在当前光标所在行的行首进入输入模式 A 在当前光标所在行的行尾进入输入模式 O 在当前光标所在行的上方新建一行并进入输入模式
- 输入模式 --> 编辑模式:
ESC
- 编辑模式 --> 末行模式:
:
末行模式 --> 编辑模式:
ESC
可能需要敲击多次
vim相关操作:
1、打开文件:
vim file 普通打开文件 vim +n file 打开文件且光标位于第n行首部 vim + file 打开文件并编辑最后一行 vim +/pattren 打开文件并定位第一次被模式匹配到的行的行首
- 2、关闭文件
在末行模式下关闭文件:
:q 不保存退出 :wq 保存退出 :q! 强制退出 :w 保存退出 :w! 强行保存 :wq! 强行保存并退出
在编辑模式下退出:
ZZ
保存并退出
3、移动光标(编辑模式下)
# 逐字符移动: 箭头 # 按单词为单位移动 w # 移至下一单词的词首 e # 移至当前或下一个单词的词尾 b # 移至当前或前一个单词的词首 # 行内跳转 0 # 绝对行首 ^ # 行首的第一个非空白字符 $ # 绝对行尾,包含空白字符 # 行间跳转 nG # 直接跳转至第 n 行行首 G # 跳转至最后一行行首 # 在末行模式下,直接给出行号即可 # 翻屏操作(编辑模式) ctrl+f 向下 ctrl+b 向上
4、删除(字符,单词,行):
# 命令行删除单个字符: x # 删除光标所在处的单个字符 nx # 删除光标所在处以及向后的共n个字符 # 编辑模式下,跟跳转命令结合使用 dw # 删除当前单词 delete word dd # 删除当前所在行 ndd # 往下删除当前所在行在内的n行 # 末行模式: :2,4d # 删除第2-4行 :2,+5 # 删除第2行以及随后的5行 $d 删除最后一行 .d 删除当前行 $-1d 删除倒数第二行
5、复制命令(在编辑模式下):
yy 复制整行
6、粘贴命令
p
:若复制或删除的内容为整行内容,则粘贴至所在行的下方;
复制或删除的内容为非整行,则粘贴至光标所在字符的后面;
7、撤销编辑操作:
u # 撤销前一次的编辑操作,可以连续使用n次 nu # 撤销最近n次的编辑操作 ctrl+r # 撤销最近一次的撤销操作
8、重复前一次的编辑操作:
.
9、查找:
/pattren ?pattren
10、查找并替换(在末行模式下)
n,ms/ad/AD/g # 在n-m行,将ad替换成AD 1,3s/hello/hi/g # 在1-3行中将hello字符串替换为hi
echo
重定向有相关介绍
追加一行内容到文件末尾:
echo asasas >> file
清空原文件并写入内容:
echo asasas > file
追加多行内容:
cat >> 3.txt << EOF > q > w > e > rt > EOF
查看内容
cat
查看所有内容
-n
显示行号-c
按字节显示,例如-c3显示前三个字节(貌似不存在)--help
查看介绍,和man作用类似,但包含中文
head
默认查看前10行内容,可以指定要显示的行数。
-n
:显示前n行[[email protected] ~]# head -2 1.txt root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin
tail
默认查看后10行内容,可以指定要显示的行数。
-n
显示最后的n行
sed
- stream editor for filtering and transforming text。
默认不编辑原文件,仅对模式空间的数据做处理。
格式:
sed ‘AddressCommands‘ file ...
- options:
-n
:静默模式,不显示模式空间中的内容-i
:直接修改原文件-e
:可以同时执行多个脚本-f
:保存至文件/path/to/script
,sed -f /path/to/script file
将指定文件中的脚本运行在file上-r
:表示使用扩展正则表达式
Address:与后面的commands结合使用
# 1、Startline、Endline 例如: 1,100 $ 表示最后一行 $-1 倒数第二行 # 2、/RegExp/ /^root/ # 表示以root字符串开始的行 sed '/3/d' file # 不显示包含3的行 sed -n '/a/p' 1.txt # 显示包含字符a的行 # 3、/pattren1/,/pattren2/,正则匹配 # 第一次被pattern1匹配的行开始,到第一次被pattern2匹配到的行结束中间的所有行。 sed -n /hi/,/a/p 1.txt # 显示从第一次匹配到字符 hi 和字符 a 以及之间所有行 # 4、指定行 sed -n 'mp' 1.txt # 显示第m行 [[email protected] ~]# sed -n 2p 3.txt b # 5、Startline, +N # 从startline开始,向后的N行 sed '1,+3d' file # 删除1-4行 [[email protected] ~]# sed 1,+2d 3.txt # 输出删除后剩余的所有内容 d e f g h [[email protected] ~]# cat 3.txt a b c d e f g h
Commands
# 1、d 删除(不显示)符合条件的行 sed 1,2d file # 显示除了1-2行的其他行 # 2、p 显示符合条件的行,结合 -n 使用,只显示符合条件的行 sed -n '/^a/p' 1.txt # 显示以 a 开头的所有行 # 3、nastring 在指定的行的下一行后追加新的行 after sed '3ahahaha' 1.txt # 在第三行下一行追加hahaha字符串 # 4、nistring 在指定的行的前一行追加新的行 # 5、r file 将指定文件的内容添加至符合条件的行处 sed 'nr demo1.sh' f1.txt # 读取demo1.sh的所有内容,将其放在 f1.txt 的第 n 行后面 # 6、w file 将指定文件的内容添加至指定的文件中,会清空目标文件 sed '/a/w f2.txt' f1.txt # 将f1.txt中包含字符a的行写入文件f2.txt中 # 7、s/pattren/string/ sed 's/a/A/' f1.txt # 将字符a替换为字符A sed 's/.*a.*/A/' f1.txt # 将包含a的行替换字符A -g # 全局替换,只要匹配就替换 sed 's/a/A/g' f1.txt # 替换每行中所有的a为A -i # 忽略大小写 sed s/h/Y/i 3.txt # 分隔符可以为 s###. [email protected]@@ # 不要使用要替换的字符为分隔符 & # 引用前面匹配到的字符串: sed 's/a/&r/g' f1.txt # 在匹配到的a字符后追加r字符 sed 's#l(..e)#L1#g' f1.txt # 只将以e结尾中间只有两个字符的l替换为L,例 hello,my love hello, linux >>> hello,my Love hello, linux
awk
显示某一行或多行,pattern scanning and processing language
awk 'NR==n' 3.txt # 显示第 n 行内容
awk "NR==n, NR==m" 3.txt # 显示 n-m 行的内容
grep
- Global Research 根据模式搜索文本并将符合模式的文本行显示出来,部分匹配。
Patterns 由文本字符 和 正则表达式的元字符组合而成的匹配条件
- options:
-i
忽略大小写--color
匹配的内容高亮显示-v
反向查找-o
只显示匹配到的字符串
grep 'ab' 1.txt # 查看包含 字符 ab 的所有行 grep -v '2' 1.txt # 列出所有不包含 字符 2 的行
正则表达式:
. # 匹配任意单个字符 * # 匹配其前面的字符任意次 .* # 匹配任意多个任意字符 ? # 匹配前一个字符0或1次 {n, m} # 匹配前面的字符至少n次,之多m次 ^ # 字符出现在行首 $ # 字符出现再行尾 ^$ # 空白行 [] # 指定集合内的任意一个字符 [^] # 非 [:digit:] # 同通配符使用 grep '[[:digit:]]' 1.txt # 匹配包含数字的行
cut
按分割后指定位置取每行对应列的内容。
-d
:指定分隔符,默认是一个空格-f
:指定要显示的字段
[[email protected] ~]# cat 3.txt
sdasda
a 12as asdasdv
vc 12as asdasds
d 12a asdasdf
[[email protected] ~]# cut -d' ' -f1 3.txt # 按照空格分割,显示每行的第一个字段
sdasda
a
vc
d
cut -d' ' -f1,2 1.txt # 每行的第1个和第2个字段
cut -d' ' -f1-3 1.txt # 显示每行的第 1-3 个字段
sort
- 查看文件内容并按行排序
- 默认按照行首个字符在ascii对应的十进制数字大小升序排序
- options:
-n
按照数值大小排序-r
降序-t
指定分隔符-k
指定字段,sort -t: -k3 -n /ect/passwd
-u
重复行只显示一次-f
不区分大小写
uniq
相邻并完全一样的行只显示一次
[[email protected] ~]# cat 3.txt
a
bb
aa
aa
bb
cc
cc
-d
显示重复行,只显示一次[[email protected] ~]# uniq -d 3.txt aa cc
-D
显示重复行,有多少显示多少[[email protected] ~]# uniq -D 3.txt aa aa cc cc
-c
显示重复的行和对应的次数[[email protected] ~]# uniq -c 3.txt 1 a 1 bb 2 aa 1 bb 2 cc
wc
- 统计文本内容(行,单词,字节数)
- options:
-l
显示行数-w
显示单词数-c
显示字节数-m
字符数-L
最长的一行包含的字符数
[email protected]:~/data$ wc 1.txt
10 18 80 1.txt
行 单词 字节
tr
translate or delete characters
显示替换后的字符,其中ac代指集合,而非一个字符串
tr 'ac' 'bd' < file # 将文件中的字符a替换成字符b
tr 'a-z' 'A-Z' < file # 将小写换成大写字母
tr -d '1' < file # 删除字符1
以上是关于Linux文件内容相关命令的主要内容,如果未能解决你的问题,请参考以下文章