Linux常用命令-文件处理

在这里插入图片描述

cat

cat 是 Unix 和 Unix-like 操作系统中的一个标准程序(其名称为 concatenate 和 catenate 的缩写),它的主要功能是读取文件并将它们的内容输出到标准输出设备(通常是终端或者其他程序)。由于其简单和多用途的特性,cat 非常适合在 shell 脚本中使用,也是日常命令行操作中不可或缺的工具之一。

基本功能:

  1. 显示文件内容:
    cat 最基本的功能是显示一个或多个文件的内容。当你需要快速查看文件内容时,只需输入 cat filename 即可。
cat file.txt
  1. 合并多个文件:
    你可以同时传递多个文件作为参数给 cat 命令,用来合并文件内容。这时候,cat 会按顺序显示所有文件的内容。
cat file1.txt file2.txt file3.txt
  1. 创建文件:
    通过重定向 cat 的输出,你可以创建一个新文件或添加内容到现有文件。
cat > newfile.txt
cat >> existingfile.txt

对于 > 操作符,如果目标文件不存在,它会创建一个新文件;如果文件已存在,它会覆盖原有内容。而 >> 操作符则会在文件末尾追加内容。

  1. 管道到其他命令:
    cat 常常与管道 (|) 结合使用,将内容传递给其他命令进行进一步处理。
cat file.txt | grep 'search'
  1. 显示行号:
    使用 -n 选项可以显示行号。
cat -n file.txt
  1. 显示不打印字符:
    使用 -v 选项可以显示文件中的不可打印字符。
cat -v file.txt

示例:

  1. 假设你有两个文件,file1.txt 的内容是:
    Hello,
    file2.txt 的内容是:
    World!
    运行命令 cat file1.txt file2.txt 将会在终端显示:
Hello,
World!

通过使用 cat file1.txt file2.txt > combined.txt,你将合并两个文件的内容并创建一个名为 combined.txt 的新文件。

注意:

虽然 cat 命令在查看较小文件内容时非常方便,但不建议用它来查看大文件,因为它会一次性将文件的所有内容加载到内存中。对于大文件,使用 less 或 more 等分页查看工具会更合适。

cat 是大多数 Linux 发行版和其他类 Unix 系统的标准组件,已成为Unix哲学的核心工具之一,即“做好一件事”(“Do one thing and do it well”)。

more和less

more 和 less 都是用于在Unix和类Unix操作系统中查看文本文件内容的命令行工具。它们提供了对长文本文件的分页查看功能,使得用户可以逐页或逐行浏览文件内容而不用一次性加载整个文件。但是,less 比 more 更为先进,提供了更多的功能和灵活性。

more:

more 命令可以用来查看长文本文件的内容,并提供了基本的滚动功能。当文件内容超出终端窗口大小时,more 允许用户逐页查看文件。

more [options] file

特点:

  1. 一次显示一屏文本。
  2. 允许向前翻页,但不支持向后翻页。
  3. 可以搜索文本字符串(但不支持跨页搜索)。
  4. 支持在查看文件的同时执行基本命令,如查找字符串等。

操作:

  1. Space:向下翻一页。
  2. Enter:向下翻一行。
  3. /:输入搜索字符串,然后按回车键搜索文本。
  4. q:退出 more。

由于 more 在功能上有一些限制,后来 less 命令被开发出来克服这些限制,并提供了更加强大和灵活的文本浏览功能。

less:

less 是对 more 的一个增强版本,它提供了类似于文本编辑器的界面来浏览文本文件。

less [options] file

特点:

  1. 支持前向和后向操作,即可以上翻页也可以下翻页。
  2. 使用内存更有效,因为它不需要在启动时加载整个文件。这使得在打开大文件时,less 更为快速。
  3. 提供了更为丰富的任意查找和导航命令。
  4. 允许在浏览文件时输出文本行。
  5. 可以查看动态生成的输出,例如监控日志文件。

操作:

  1. Space:向下翻一页。
  2. b:向上翻一页。
  3. Down Arrow:向下翻一行。
  4. Up Arrow:向上翻一行。
  5. /:输入搜索字符串,然后按回车键向下搜索文本。
  6. ?:输入搜索字符串,然后按回车键向上搜索文本。
  7. n:重复前一个搜索。
  8. N:反向重复前一个搜索。
  9. G:移动到文件的末尾。
  10. g:移动到文件的开头。
  11. q:退出 less。

less 是一个非常强大的命令行工具,因其提供的高效操作和丰富的特性,经常被推荐用来查看长文本文件或日志文件。

当您在处理大文件,或者需要更复杂的导航和搜索功能时,使用 less 而不是 more 会是一个更好的选择。不过,值得注意的是 less 在执行一些特定任务时的学习曲线比 more 要稍微陡峭一些。

head和tail

head 和 tail 是 Unix 和类 Unix 操作系统中的命令行工具,它们提供了查看文本文件开头和结尾部分的功能。这两个命令特别有用,尤其是当您只需要查看文件的部分内容,而不是整个文件时。

head:

head 命令用于输出文件的前几行。默认情况下,head 会显示文件的前10行,但您可以通过 -n 选项指定显示的行数。

基本用法:

head [选项] [文件路径]

示例:

  1. 显示文件的前 10 行:
head myfile.txt
  1. 显示文件的前 20 行:
head -n 20 myfile.txt

或者

head -20 myfile.txt

head 命令通常在需要快速查看文件开始部分的内容时非常有用,例如检查日志文件的最近条目或检查数据文件的格式。

tail:

与 head 命令相对的是 tail 命令,它用来查看文件的结尾部分。默认情况下,tail 会显示文件的最后 10 行,但同样可以通过 -n 选项来指定显示的行数。

基本用法:

tail [选项] [文件路径]

示例:

  1. 显示文件的最后 10 行:
tail myfile.txt
  1. 显示文件的最后 20 行:
tail -n 20 myfile.txt

或者

tail -20 myfile.txt

tail 最强大的特性之一是 -f 选项,它允许你实时监视文件的更新。当文件被追加新内容时,这些新的内容会被立即输出到屏幕。

  1. 实时监视文件追加的内容:
tail -f myfile.txt

tail 常用于监控日志文件,实时查看日志输出,或者检查文件的最新添加内容。

组合使用:

通过管道 (|) 和其他工具组合,head 和 tail 可以非常强大。例如,你可以使用 grep 命令过滤文本,然后用 head 或 tail 查看前几行或最后几行结果。

grep "something" myfile.txt | head -n 5

上面的命令会在 myfile.txt 文件中搜索包含 “something” 的行,并只输出匹配的前 5 行。

head 和 tail 对于处理大量文本数据时提供了简便的方式来快速预览或追踪文件的特定部分,是文本处理工具箱中不可或缺的工具。

grep

grep 是一个强大的文本搜索工具,其名称来自 “Global Regular Expression Print”。它使用正则表达式在文本文件中搜索模式,并输出匹配的行。grep 在Unix、Linux以及各种Unix-like系统上广泛存在,并且是文本处理和数据分析中最常用的命令之一。

grep 的基本用法:

grep [选项] '模式' [文件...]

这里,“模式”是你需要搜索的文本或正则表达式,而“文件”是你需要搜索的文件名。如果不指定文件或者指定为-,grep会从标准输入中读取数据。

常用选项:

-i:忽略大小写(例如,将匹配“hello”、“Hello”、“HELLO”等)。
-v:反向匹配,即输出不匹配的行。
-c:计数匹配的行数而不是输出匹配的内容。
-n:在输出的每一行前显示行号。
-l:只输出包含匹配行的文件的文件名。
-L:只输出不包含匹配行的文件的文件名。
-r 或 -R:递归搜索目录中的所有文件。
-E:使用扩展正则表达式(ERE)语法。
-F:将模式作为固定字符串而非正则表达式处理。

示例:

  1. 查找文件中包含 “text” 的所有行:
grep 'text' filename.txt
  1. 忽略大小写,查找 “text”:
grep -i 'text' filename.txt
  1. 查找包含 “text” 的所有行,并显示行号:
grep -n 'text' filename.txt
  1. 查找 “text” 并计数匹配行的数量:
grep -c 'text' filename.txt
  1. 查找 “text” 不出现的行:
grep -v 'text' filename.txt
  1. 使用正则表达式搜索电话号码格式(如 123-456-7890):
grep -E '[0-9]{3}-[0-9]{3}-[0-9]{4}' filename.txt
  1. 递归搜索当前目录下所有的.txt文件,查找含有“text”的文件:
grep -r 'text' *.txt

注意事项:

正则表达式的能力取决于 grep 的版本和使用的选项。例如,基础 grep 支持的正则表达式有限,而 grep -E 支持扩展的正则表达式,而 grep -P(在某些系统中可用)支持Perl兼容正则表达式(PCRE),使得复杂的模式匹配成为可能。
当你需要将 grep 用于脚本或更复杂的文本处理时,熟练掌握正则表达式将是一个巨大的优势。
在搜索的文本或文件名中使用通配符、特殊字符时,需要确保适当地引用或转义,以避免 shell 对这些字符的特殊处理。

sed

sed(stream editor 的缩写)是 Unix 和类 Unix 系统中一个非常强大的流式文本编辑器。sed 主要用于执行基于文本的转换操作,如搜索、查找和替换、插入或删除行。它是通过使用脚本来处理输入文本(来自于文件或者直接来自于标准输入),然后将结果输出到标准输出。

sed 常用于编写shell脚本或在命令行对文本进行快速编辑和转换,特别适合处理数据流或进行自动化文本替换等工作。

sed 的基本用法:

sed [选项]... 脚本 [输入文件...]

脚本 是一套命令,该命令定义了如何处理和转换输入的文本。如果没有指定输入文件,sed 将从标准输入读取文本。

常用选项:

-e script:向 sed 添加一条处理脚本命令。
-f script-file:指定一个包含 sed 脚本的文件。
-i[SUFFIX]:直接编辑文件原地替换(in-place)。如果提供后缀,原始文件会被备份。
-n:默认情况下,sed 会打印出所有的处理行,使用 -n 选项后只有经过 sed 特定命令处理的行会被打印。

sed 脚本语法:

sed 脚本通常包含一系列命令,由一个地址和一个命令字符组成。地址用来指定命令所应用的行,命令字符定义了具体的行动。

常用的 sed 命令:

s:替换,格式为 s/寻找的字符串/替换的字符串/。
d:删除,格式为 d。
p:打印,格式为 p。
i:在之前插入文本,格式为 i\文本。
a:在之后追加文本,格式为 a\文本。
c:替换匹配行的内容。

示例:

  1. 替换文本中的字符串:
sed 's/old/new/' file.txt

这会将 file.txt 文件中每行第一个出现的 “old” 替换为 “new”。

  1. 全局替换文本中的字符串:
sed 's/old/new/g' file.txt
  1. 使用 g 选项将会替换每行中所有 “old” 字符串。

  2. 直接编辑文件(原地替换):

sed -i 's/old/new/g' file.txt

使用 -i 选项直接修改 file.txt 文件,不会在标准输出显示结果。

  1. 删除文件中的所有空白行:
sed '/^$/d' file.txt
  1. 仅替换文件中的第2到第5行:
sed '2,5s/old/new/' file.txt

通过指定行范围,只有文件中的第2行到第5行会被处理。

sed 是一个功能非常强大的文本处理工具,能够执行复杂的文本转换和过滤。掌握其基本用法和脚本的写法,对于自动化文本处理和数据分析极为有用。需要注意的一点是,sed 处理的是文本流,所以它适合用于在流中进行单次传递编辑操作,而不是多次的交互式编辑。

awk

awk 是一种编程语言,同时也是一个强大的文本处理工具,它主要用于 Unix 和类 Unix 系统中。awk 以其数据驱动的脚本引擎和适合处理结构化文本(特别是基于列的数据处理)的特性而著名。它是由 Alfred Aho, Peter Weinberger, 和 Brian Kernighan 所开发,因此得名 AWK。

awk 通过内置对文本和正则表达式的支持,可以轻松地分割记录、处理字段、进行计算和重组输出。由于这些功能,awk 常被用于编写复杂的数据处理程序。

awk 的基本用法:

awk [选项] '程序' [文件...]

“程序” 通常含有一系列的规则,其中每条规则关联一个模式以及一些在匹配该模式时要执行的行动。
如果没有指定文件,awk 将从标准输入中读取数据。

常用选项:

-f file:从文件中读取程序。
-F fs:设置字段分隔符(默认为空格和制表符)。
awk 程序结构:
awk 的程序一般由如下格式组成:

模式 { 行动 }

  • 模式 定义了一个 awk 程序的触发条件,可以是正则表达式或比较操作。
  • 行动 是一组由大括号 {} 括起来的命令,这些命令只有在模式匹配的时候才会被执行。

特殊模式:

  • BEGIN:执行输入任何行之前的命令。
  • END:执行完所有输入行后的命令。

示例:

  1. 打印每一行的第一列和第三列:
awk '{ print $1, $3 }' file.txt
  1. 分割字段并打印(以逗号为分隔符):
awk -F, '{ print $1, $2 }' file.csv
  1. 根据条件打印(如果第二列大于 100):
awk '$2 > 100 { print $0 }' file.txt
  1. 多个命令:
awk '$1 ~ /^foo/ { print "Starts with foo: ", $0; count++ }
END { print "Total count:", count }' file.txt
  1. 使用 BEGIN:
awk 'BEGIN { FS=","; OFS = " -- " } { print $1, $2 }' file.csv

这里,FS 是字段分隔符(Field Separator),OFS 是输出字段分隔符(Output Field Separator),调整它们可以改变输入和输出时字段的分隔方式。

awk 强大在于它不仅仅是一个命令行工具,而是一种编程语言,所以能够处理非常复杂的文本处理任务。awk 的学习弧线可能比较陡峭,但是掌握了它,您将能够非常快速地执行各种各样的数据提取和报告任务。对于任何经常与文本或数据文件打交道的人来说,awk 都是必不可少的工具。

参考资料

  • GNU sed 手册:
    https://www.gnu.org/software/sed/manual/sed.html
    这是 GNU 版本的 sed 官方手册,提供完整的命令列表和选项描述。
  • GNU awk 手册:
    https://www.gnu.org/software/gawk/manual/gawk.html
    官方 GNU 版本的 awk 手册是学习 awk 的权威资源。
  • 22
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

namedlock

您的鼓励是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值