Linux运维——文件内容查看编辑

文件内容查看编辑

一、Linux 文件内容查看编辑要点

  • 连接文件并打印到标准输出设备 - 使用 cat
  • 显示指定文件的开头若干行 - 使用 head
  • 显示指定文件的末尾若干行,常用于实时打印日志文件内容 - 使用 tail
  • 显示文件内容,每次显示一屏 - 使用 more
  • 显示文件内容,每次显示一屏 - 使用 less
  • 自动编辑一个或多个文件;简化对文件的反复操作;编写转换程序等 - 使用sed
  • 文本编辑器 - 使用 vivim
  • 使用正则表达式搜索文本,并把匹配的行打印出来 - 使用 grep

二、命令常见用法

2.1、cat

cat 命令用于连接文件并打印到标准输出设备上。

sh 复制代码
cat m1              # 在屏幕上显示文件 ml 的内容
cat m1 m2           # 同时显示文件 ml 和 m2 的内容
cat m1 m2 > file    # 将文件 ml 和 m2 合并后放入文件 file 中

2.2、head

head 命令用于显示文件的开头内容。在默认情况下,head 命令显示文件的头部 10 行内容。

sh 复制代码
head [OPTION]... [FILE]...
  • -n--lines=[-]K:指定输出文件的行数。例如,head -n 5 FILE会显示文件的前5行内容。如果数字前有"-"符号,则显示除了最后N行以外的所有内容。‌
  • -c--bytes=[-]K:指定输出文件的字节数。例如,head -c 50 FILE会显示文件的前50个字节内容。如果数字前有"-"符号,则显示除了最后N个字节以外的所有内容。
  • -q--quiet:静默模式,不输出文件名头信息。通常在处理多个文件时使用。
  • -v--verbose:总是输出文件名的头信息。
sh 复制代码
# 显示文件的前5行
head -n 5 test.txt

# 显示文件的前50个字节
head -c 50 test.txt

# 显示文件除了最后3行以外的所有内容
head -n -3 test.txt

2.3、tail

tail 命令用于显示文件的尾部内容。在默认情况下,tail 命令显示文件的尾部 10 行内容。如果给定的文件不止一个,则在显示的每个文件前面加一个文件名标题。如果没有指定文件或者文件名为"-",则读取标准输入。

sh 复制代码
tail [选项] [文件]
  • -n--lines=[+]K:显示文件的最后 K 行内容。如果 K 前面加上+,则从第 K 行开始显示。例如,tail -n 5 filename 显示文件的最后 5 行‌
  • -c--bytes=[+]K:显示文件的最后 K 个字节。如果 K 前面加上+,则从第 K 个字节开始显示。例如,tail -c 100 filename 显示文件的最后 100 个字节‌
  • -f--follow:实时显示文件的新添加内容,常用于监控日志文件。例如,tail -f filename 会实时显示文件的新增内容‌
  • -F:类似于 -f,但在文件被重命名或删除后会继续跟踪新的文件‌
  • -q--quiet--silent:不显示文件名(当处理多个文件时)‌
  • -v--verbose:始终显示文件名(即使只处理一个文件)‌
  • --pid=PID:与 -f 选项一起使用,当指定的进程 ID (PID) 结束时,tail命令也会停止‌
  • -s--sleep-interval=S:与 -f 选项一起使用,指定每次检查文件变化的间隔时间(秒)‌
sh 复制代码
# 显示文件的最后10行
tail filename

# 显示文件的最后5行
tail filename -n 5

# 实时监控文件内容
tail -f filename

# 不显示文件名
tail -q file1 file2

# 始终显示文件名
tail -v filename

# 从第5行开始显示
tail -n +5 filename

# 显示文件的最后10个字符
tail -c 10 file

2.4、more

more 命令是一个基于 vi 编辑器文本过滤器,它以全屏幕的方式按页显示文本文件的内容,支持 vi 中的关键字定位操作。more 名单中内置了若干快捷键,常用的有 H(获得帮助信息),Enter(向下翻滚一行),空格(向下滚动一屏),Q(退出命令)。

该命令一次显示一屏文本,满屏后停下来,并且在屏幕的底部出现一个提示信息,给出至今己显示的该文件的百分比:--More--(XX%)可以用下列不同的方法对提示做出回答:

  • Space 键:显示文本的下一屏内容。
  • Enier 键:只显示文本的下一行内容。
  • 按斜线符|:接着输入一个模式,可以在文本中寻找下一个相匹配的模式。
  • H 键:显示帮助屏,该屏上有相关的帮助信息。
  • B 键:显示上一屏内容。
  • Q 键:退出 rnore 命令。
sh 复制代码
more [选项] [文件名]
  • -d:显示底行,并显示翻页符。
  • -i:忽略底行,不显示翻页符。
  • -s:连续显示相同行。
  • -u:只显示上行。
  • -l:限制每行显示的字符数。
  • -p:不显示空白行。
  • -f:显示文件大小信息。
  • -H:在终端中显示完整的文件路径。
  • -n:设置行号。
  • -r:将制表符转换为空格。
  • -N:设置缓冲区的大小。
  • -b:使用缓冲区大小为指定值。
  • -s:在每个缓冲区之间添加一个空行。
  • -t:在每个缓冲区之间添加一个时间戳。
  • -u:在每个缓冲区之间添加一个用户标识符。
  • -v:在每个缓冲区之间添加一个版本信息。
  • -w:在每个缓冲区之间添加一个窗口大小信息。
  • -z:在每个缓冲区之间添加一个压缩信息。
sh 复制代码
# 显示文件 file 的内容,但在显示之前先清屏,并且在屏幕的最下方显示完核的百分比。
more -dc file

# 显示文件 file 的内容,每 10 行显示一次,而且在显示之前先清屏。
more -c -10 file

# 分页显示文件内容
more file.txt

# 在终端中显示行号
more -n 1 file.txt

# 显示文件开头或结尾内容
more +10 file.txt
more -10 file.txt

# 显示非打印字符
more -v file.txt

# 显示行尾的换行符
more -d file.txt

# 将多个文件合并为一个文件
more file1.txt file2.txt > mergedfile.txt

# 将多个文件的内容按顺序追加到一个新文件中
more file1.txt >> mergedfile.txt
more file2.txt >> mergedfile.txt

# 使用 more 命令进行搜索
more +/string file.txt

# 将 more 命令与其他命令结合使用
ls -l | more

# 在 more 命令中指定缓冲区大小
more --lines=20 file.txt

2.5、less

less 命令的作用与 more 十分相似,都可以用来浏览文字档案的内容,不同的是 less 命令允许用户向前或向后浏览文件,而 more 命令只能向前浏览。用 less 命令显示文件时,用 PageUp 键向上翻页,用 PageDown 键向下翻页。要退出 less 程序,应按 Q 键。

  • 查看文件内容‌:在终端中输入 less 文件名 可以分页查看文件内容。使用方向键↑和↓可以上下滚动,Page Up和Page Down键可以翻页。‌
  • 搜索文本‌:输入 / 后接搜索词可以向下搜索,输入 ? 后接搜索词可以向上搜索。按 n 键可以查找下一个匹配项,按 N 键可以查找上一个匹配项。
  • 退出‌:按 q 键可以退出 less 命令。
sh 复制代码
less [选项] [文件]
  • -N:显示行号,方便查看和定位文本内容。
  • -S:当文本行过长时,将超出屏幕宽度的部分横向滚动显示,避免文本换行影响查看。
  • -m:显示文件的百分比位置,以及当前显示的行范围,便于了解查看进度。‌
  • -i:忽略搜索时的大小写。
  • -G:清除高亮搜索匹配后的结果。
  • -e:当到达文件尾后自动退出文件。
  • -r:显示原始字符,包括控制字符。
  • -s:将连续的多个空行显示为一行。
  • --help:显示帮助信息。
  • --version:显示版本信息

less命令使用文档:

sh 复制代码
下面是LESS命令的摘要:

      标有 * 的命令可能前面会有一个数字N。
      括号内的注释表示如果给出N,行为将如何改变。
      前面有插入符号的键表示Ctrl键;因此^K表示ctrl-K。

  h  H                 显示这个帮助。
  q  :q  Q  :Q  ZZ     退出。
 ---------------------------------------------------------------------------

                           移动

  e  ^E  j  ^N  CR  *  向前移动一行(或N行)。
  y  ^Y  k  ^K  ^P  *  向后移动一行(或N行)。
  f  ^F  ^V  SPACE  *  向前移动一个窗口(或N行)。
  b  ^B  ESC-v      *  向后移动一个窗口(或N行)。
  z                 *  向前移动一个窗口(并将窗口设定为N)。
  w                 *  向后移动一个窗口(并将窗口设定为N)。
  ESC-SPACE         *  向前移动一个窗口,但不停在文件结束处。
  d  ^D             *  向前移动半个窗口(并将半窗口设定为N)。
  u  ^U             *  向后移动半个窗口(并将半窗口设定为N)。
  ESC-)  RightArrow *  右移半个屏幕宽度(或N个位置)。
  ESC-(  LeftArrow  *  左移半个屏幕宽度(或N个位置)。
  ESC-}  ^RightArrow   移到最后一列显示。
  ESC-{  ^LeftArrow    移到第一列。
  F                    向前永远;类似于 "tail -f"。
  ESC-F                类似于F,但在找到搜索模式时停止。
  r  ^R  ^L            重绘屏幕。
  R                    重绘屏幕,丢弃缓冲输入。
        ---------------------------------------------------
        默认的"窗口"是屏幕高度。
        默认的"半窗口"是屏幕高度的一半。
 ---------------------------------------------------------------------------

                          搜索

  /pattern          *  向前搜索(N-th)匹配行。
  ?pattern          *  向后搜索(N-th)匹配行。
  n                 *  重复上次搜索(N-th出现)。
  N                 *  反向重复上次搜索。
  ESC-n             *  重复上次搜索,跨文件。
  ESC-N             *  反向重复上次搜索,跨文件。
  ESC-u                撤销(切换)搜索高亮。
  &pattern          *  仅显示匹配行
        ---------------------------------------------------
        搜索模式可能以一个或多个以下符号开始:
        ^N 或 !  搜索不匹配的行。
        ^E 或 *  搜索多个文件(通过文件结束)。
        ^F 或 @  在第一个文件(对于/)或最后一个文件(对于?)开始搜索。
        ^K       高亮匹配,但不移动(保持位置)。
        ^R       不使用正则表达式。
 ---------------------------------------------------------------------------

                           跳转

  g  <  ESC-<       *  跳转到文件的第一行(或第N行)。
  G  >  ESC->       *  跳转到文件的最后一行(或第N行)。
  p  %              *  跳转到文件的开头(或文件的N%位置)。
  t                 *  跳转到下一个(第N个)标签。
  T                 *  跳转到上一个(第N个)标签。
  {  (  [           *  查找关闭的括号 } ) ]。
  }  )  ]           *  查找打开的括号 { ( [。
  ESC-^F <c1> <c2>  *  查找关闭的括号 <c2>。
  ESC-^B <c1> <c2>  *  查找打开的括号 <c1>
        ---------------------------------------------------
        每一个"查找关闭括号"命令都会向前找到与顶行中的(第N个)打开括号匹配的关闭括号。
        每一个"查找打开括号"命令都会向后找到与底行中的(第N个)关闭括号匹配的打开括号。

  m<字母>            使用<字母>标记当前的顶行。
  M<字母>            使用<字母>标记当前的底行。
  '<字母>            跳转到之前标记的位置。
  ''                 跳转到上一个位置。
  ^X^X               同 '。
  ESC-M<字母>        清除一个标记。
        ---------------------------------------------------
        标记可以是任何大写或小写的字母。
        有些标记是预定义的:
             ^  代表  文件的开头
             $  代表  文件的结尾
 ---------------------------------------------------------------------------

                        切换文件

  :e [file]            检查一个新文件。
  ^X^V                 同 :e。
  :n                *  检查命令行中的下一个(第N个)文件。
  :p                *  检查命令行中的上一个(第N个)文件。
  :x                *  检查命令行中的第一个(或第N个)文件。
  :d                   从命令行列表中删除当前文件。
  =  ^G  :f            打印当前文件名。
 ---------------------------------------------------------------------------

                    其他命令

  -<标志>              切换命令行选项[见下面的OPTIONS]。
  --<名称>             通过名称切换命令行选项。
  _<标志>              显示命令行选项的设置。
  __<名称>             通过名称显示选项的设置。
  +cmd                 每次检查新文件时执行less cmd。

  !command             使用$SHELL执行shell命令。
  |Xcommand            将当前位置和标记X之间的文件通过管道传输给shell命令。
  s file               将输入保存到一个文件。
  v                    使用$VISUAL或$EDITOR编辑当前文件。
  V                    打印"less"的版本号。
 ---------------------------------------------------------------------------

					选项

        大多数选项可以在命令行上更改,
        或者在less中使用-或--命令来更改。
        选项可以有两种形式:一个是前面带有-的单个字符,
        另一个是前面带有--的名称。

  -?  ........  --help
                  显示帮助(来自命令行)。
  -a  ........  --search-skip-screen
                  搜索跳过当前屏幕。
  -A  ........  --SEARCH-SKIP-SCREEN
                  搜索开始于目标行之后。
  -b [N]  ....  --buffers=[N]
                  缓冲区数量。
  -B  ........  --auto-buffers
                  不为管道自动分配缓冲区。
  -c  ........  --clear-screen
                  通过清除而不是滚动来重绘。
  -d  ........  --dumb
                  哑终端。
  -D [xn.n]  .  --color=xn.n
                  设置屏幕颜色。(仅限MS-DOS)
  -e  -E  ....  --quit-at-eof  --QUIT-AT-EOF
                  在文件结束时退出。
  -f  ........  --force
                  强制打开非常规文件。
  -F  ........  --quit-if-one-screen
                  如果整个文件适合在第一屏显示,则退出。
  -g  ........  --hilite-search
                  仅高亮显示搜索的最后一个匹配。
  -G  ........  --HILITE-SEARCH
                  不高亮显示任何搜索匹配。
  -h [N]  ....  --max-back-scroll=[N]
                  向后滚动限制。
  -i  ........  --ignore-case
                  在搜索中忽略大小写,前提是搜索不包含大写字母。
  -I  ........  --IGNORE-CASE
                  在所有搜索中忽略大小写。
  -j [N]  ....  --jump-target=[N]
                  目标行的屏幕位置。
  -J  ........  --status-column
                  在屏幕左边缘显示状态列。
  -k [file]  .  --lesskey-file=[file]
                  使用lesskey文件。
  -K  ........  --quit-on-intr
                  响应ctrl-C退出less。
  -L  ........  --no-lessopen
                  忽略LESSOPEN环境变量。
  -m  -M  ....  --long-prompt  --LONG-PROMPT
                  设置提示样式。
  -n  -N  ....  --line-numbers  --LINE-NUMBERS
                  不使用行号。
  -o [file]  .  --log-file=[file]
                  复制到日志文件(仅限标准输入)。
  -O [file]  .  --LOG-FILE=[file]
                  复制到日志文件(无条件覆盖)。
  -p [pattern]  --pattern=[pattern]
                  从命令行开始于模式。
  -P [prompt]   --prompt=[prompt]
                  定义新提示。
  -q  -Q  ....  --quiet  --QUIET  --silent --SILENT
                  静音终端铃声。
  -r  -R  ....  --raw-control-chars  --RAW-CONTROL-CHARS
                  输出"原始"控制字符。
  -s  ........  --squeeze-blank-lines
                  压缩多个空白行。
  -S  ........  --chop-long-lines
                  切除(截断)长行而不是包裹。
  -t [tag]  ..  --tag=[tag]
                  查找标签。
  -T [tagsfile] --tag-file=[tagsfile]
                  使用备用的标签文件。
  -u  -U  ....  --underline-special  --UNDERLINE-SPECIAL
                  更改处理退格符的方式。
  -V  ........  --version
                  显示"less"的版本号。
  -w  ........  --hilite-unread
                  在前向屏幕后高亮显示第一条新行。
  -W  ........  --HILITE-UNREAD
                  在任何前向移动后高亮显示第一条新行。
  -x [N[,...]]  --tabs=[N[,...]]
                  设置制表符停止位。
  -X  ........  --no-init
                  不使用termcap初始化/反初始化字符串。
  -y [N]  ....  --max-forw-scroll=[N]
                  前向滚动限制。
  -z [N]  ....  --window=[N]
                  设置窗口大小。
  -" [c[c]]  .  --quotes=[c[c]]
                  设置shell引号字符。
  -~  ........  --tilde
                  不显示文件结束后的波浪号。
  -# [N]  ....  --shift=[N]
                  水平滚动量(0 = 半个屏幕宽度)
                --follow-name
                  如果输入文件被重命名,F命令更改文件。
                --mouse
                  启用鼠标输入。
                --no-keypad
                  不发送termcap键盘初始化/反初始化字符串。
                --no-histdups
                  从命令历史中删除重复项。
                --rscroll=C
                  设置用于标记截断行的字符。
                --save-marks
                  在less的调用中保留标记。
                --use-backslash
                  后续选项使用反斜杠作为转义字符。
                --wheel-lines=N
                  鼠标滚轮每点击一次移动N行。


 ---------------------------------------------------------------------------

                          行编辑

        这些键可以用来编辑在屏幕底部"命令行"上输入的文本。

 右箭头 ..................... ESC-l ... 光标向右移动一个字符。
 左箭头 ...................... ESC-h ... 光标向左移动一个字符。
 ctrl-右箭头  ESC-右箭头  ESC-w ... 光标向右移动一个单词。
 ctrl-左箭头   ESC-左箭头   ESC-b ... 光标向左移动一个单词。
 HOME ........................... ESC-0 ... 光标移动到行首。
 END ............................ ESC-$ ... 光标移动到行尾。
 BACKSPACE ................................ 删除光标左边的字符。
 DELETE ......................... ESC-x ... 删除光标下的字符。
 ctrl-BACKSPACE   ESC-BACKSPACE ........... 删除光标左边的单词。
 ctrl-DELETE .... ESC-DELETE .... ESC-X ... 删除光标下的单词。
 ctrl-U ......... ESC (仅MS-DOS) ....... 删除整行。
 上箭头 ........................ ESC-k ... 检索上一条命令行。
 下箭头 ...................... ESC-j ... 检索下一条命令行。
 TAB ...................................... 完成文件名并循环。
 SHIFT-TAB ...................... ESC-TAB   完成文件名并反向循环。
 ctrl-L ................................... 完成文件名,列出全部。

2.6、sed

sed 是一种流编辑器,它是文本处理工具,能够完美的配合正则表达式使用,功能不同凡响。处理时,把当前处理的行存储在临时缓冲区中,称为"模式空间"(pattern space),接着用 sed 命令处理缓冲区中的内容,处理完成后,把缓冲区的内容送往屏幕。接着处理下一行,这样不断重复,直到文件末尾。文件内容并没有改变,除非你使用重定向存储输出。Sed 主要用来自动编辑一个或多个文件;简化对文件的反复操作;编写转换程序等。

sh 复制代码
# 替换文本中的字符串
sed 's/book/books/' file

# -n 选项 和 p 命令 一起使用表示只打印那些发生替换的行
sed -n 's/test/TEST/p' file

# 直接编辑文件选项 -i ,会匹配 file 文件中每一行的第一个 book 替换为 books
sed -i 's/book/books/g' file

# 使用后缀 /g 标记会替换每一行中的所有匹配
sed 's/book/books/g' file

# 删除空白行
sed '/^$/d' file

# 删除文件的第2行
sed '2d' file

# 删除文件的第2行到末尾所有行
sed '2,$d' file

# 删除文件最后一行
sed '$d' file

# 删除文件中所有开头是test的行
sed '/^test/'d file

2.7、vi

vi 命令是 UNIX 操作系统和类 UNIX 操作系统中最通用的全屏幕纯文本编辑器。Linux 中的 vi 编辑器叫 vim,它是 vi 的增强版(vi Improved),与 vi 编辑器完全兼容,而且实现了很多增强功能。

sh 复制代码
vi filename

2.8、grep

grep(global search regular expression(RE) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。

sh 复制代码
# 在多级目录中对文本递归搜索(程序员搜代码的最爱):
$ grep "class" . -R -n

# 忽略匹配样式中的字符大小写
$ echo "hello world" | grep -i "HELLO"

# 匹配多个模式:
$ grep -e "class" -e "vitural" file

# 只在目录中所有的.php和.html文件中递归搜索字符"main()"
$ grep "main()" . -r --include *.{php,html}

# 在搜索结果中排除所有README文件
$ grep "main()" . -r --exclude "README"

# 在搜索结果中排除filelist文件列表里的文件
$ grep "main()" . -r --exclude-from filelist
相关推荐
drebander4 分钟前
Maven 构建生命周期与阶段详解
java·maven
web1309332039836 分钟前
JAVA面试之容器
java·开发语言·面试
扫地僧00937 分钟前
第18章 不可变对象设计模式(Java高并发编程详解:多线程与系统设计)
java·python·设计模式
洛嘚1 小时前
多数据源配置及使用,在同一个方法下切换数据源。
java·服务器·数据库
m0_748251721 小时前
使用 Nginx 搭建代理服务器(正向代理 HTTPS 网站)指南
运维·nginx·https
爱吃喵的鲤鱼2 小时前
Linux——网络(http)
linux·网络·http
m0_748239472 小时前
【Sql Server】sql server 2019设置远程访问,外网服务器需要设置好安全组入方向规则
运维·服务器·安全
LNsupermali2 小时前
力扣.270. 最接近的二叉搜索树值(中序遍历思想)
java·算法·leetcode
Swift社区2 小时前
【GitLab CI/CD 实践】从 0 到 1 搭建高效自动化部署流程
运维·ci/cd·自动化·gitlab
gyeolhada2 小时前
2025蓝桥杯JAVA编程题练习Day3
java·数据结构·算法·蓝桥杯