命令与脚本:文本处理与检索 · 查看文件、分页阅读与追踪末尾至搜索文本、代码与 PDF
命令与脚本:文本处理与检索
查看文件、分页阅读与追踪末尾
直接输出用 cat;逐页阅读用 less 或 more;只取首尾用 head、tail。bat 的高亮和行号适合交互阅读,串接文件时留意装饰输出。
cat · 打印和连接文件
- 将文件内容打印到
标准输出:
bash
cat {{路径/到/文件}}- 将多个文件连接成一个输出文件:
bash
cat {{路径/到/文件1 路径/到/文件2 ...}} > {{路径/到/输出文件}}- 将多个文件追加到一个输出文件中:
bash
cat {{路径/到/文件1 路径/到/文件2 ...}} >> {{路径/到/输出文件}}- 无缓冲地将文件内容复制到输出文件中:
bash
cat -u {{/dev/tty12}} > {{/dev/tty13}}- 将
标准输入写入文件:
bash
cat - > {{路径/到/文件}}bat · 可以打印并且合并文件的命令
cat的复制品,外加语法高亮和 Git 集成。 另请参阅:cat。 更多信息:https://manned.org/bat。
- 使用美化样式打印一个或多个文件的内容到
stdout:
bash
bat {{路径/到/文件1 路径/到/文件2 ...}}- 将多个文件连接成一个目标文件:
bash
bat {{路径/到/文件1 路径/到/文件2 ...}} > {{路径/到/目标文件}}- 移除修饰并禁用分页:
bash
bat {{[-pp|--style plain --pager never]}} {{路径/到/文件}}- 使用不同的背景颜色高亮显示特定行或一行范围:
bash
bat {{[-H|--highlight-line]}} {{10|5:10|:10|10:|10:+5}} {{路径/到/文件}}- 显示不可打印字符,如空格、制表符或换行:
bash
bat {{[-A|--show-all]}} {{路径/到/文件}}- 在输出中只保留行号,移除所有其他修饰:
bash
bat {{[-n|--number]}} {{路径/到/文件}}- 通过明确设置语言来语法高亮显示 JSON 文件:
bash
bat {{[-l|--language]}} json {{路径/到/文件.json}}- 显示所有支持的语言:
bash
bat {{[-L|--list-languages]}}less · 打开一个文件进行交互式阅读,允许滚动和搜索
更多信息:https://manned.org/less。
- 打开一个文件:
bash
less {{路径/到/文件}}- 向下/向上翻页:
bash
{{<Space>|<b>}}- 转到文件末尾/开头:
bash
{{<G>|<g>}}- 向前搜索字符串(按
<n>/<N>转到下一个/上一个匹配项):
bash
</>{{关键字}}- 向后搜索字符串(按
<n>/<N>转到下一个/上一个匹配项):
bash
<?>{{关键字}}- 跟踪当前打开的文件的输出:
bash
<F>- 在编辑器中打开当前文件:
bash
<v>- 退出:
bash
<q>more · 交互式地显示文件,允许滚动和搜索
另请参阅:
less。 更多信息:https://manned.org/more.1p。
- 打开一个文件:
bash
more {{路径/到/文件}}- 打开一个文件,从特定行开始显示:
bash
more +{{行号}} {{路径/到/文件}}- 转到下一页:
bash
<空格>- 搜索一个字符串(按
<n>键跳转到下一个匹配):
bash
</>{{字符串}}<Enter>- 退出:
bash
<q>- 显示关于交互式命令的帮助:
bash
<h>head · 显示文件的开头部分
- 显示文件的前几行:
bash
head -n {{行数}} {{路径/到/文件}}tail · 显示文件的最后一部分
另请参阅:
head。 更多信息:https://www.gnu.org/software/coreutils/manual/html_node/tail-invocation.html。
- 显示文件中最后 n 行:
bash
tail {{[-n|--lines]}} {{n}} {{路径/到/文件}}- 从特定行号开始打印文件后续内容:
bash
tail {{[-n|--lines]}} +{{行号}} {{路径/到/文件}}- 从给定文件末尾打印特定字节数量的内容:
bash
tail {{[-c|--bytes]}} {{字节数}} {{路径/到/文件}}- 打印给定文件的最后几行并保持读取直到
<Ctrl c>:
bash
tail {{[-f|--follow]}} {{路径/到/文件}}- 保持读取文件直到
<Ctrl c>,即使文件无法访问:
bash
tail {{[-F|--retry --follow]}} {{路径/到/文件}}- 显示文件中最后 n 行并每 t 秒刷新一次:
bash
tail {{[-n|--lines]}} {{n}} {{[-s|--sleep-interval]}} {{t}} {{[-f|--follow]}} {{路径/到/文件}}搜索文本、代码与 PDF
先按输入类型选择工具:代码目录用 rg、ack 或 ugrep;普通文本用 grep;PDF 用 pdfgrep;命令手册的关键词检索用 apropos。
rg · Ripgrep,一款递归的行导向搜索工具
旨在成为
grep的更快替代品。 更多信息:https://github.com/BurntSushi/ripgrep/blob/master/GUIDE.md。
- 在当前目录中递归搜索匹配模式的内容(
regex):
bash
rg {{模式}}- 在指定文件或目录中递归搜索匹配模式的内容:
bash
rg {{模式}} {{路径/到/文件或目录}}- 搜索字面字符串模式:
bash
rg {{[-F|--fixed-strings]}} -- {{字符串}}- 包含隐藏文件以及
.gitignore中列出的条目:
bash
rg {{[-.|--hidden]}} --no-ignore {{模式}}- 仅搜索文件名匹配通配符(glob)模式的文件(例如
README.*):
bash
rg {{模式}} {{[-g|--glob]}} {{文件名通配符模式}}- 递归列出当前目录中匹配模式的文件名:
bash
rg --files | rg {{模式}}- 仅列出匹配的文件(适用于管道传递给其他命令):
bash
rg {{[-l|--files-with-matches]}} {{模式}}- 显示不匹配该模式的行:
bash
rg {{[-v|--invert-match]}} {{模式}}grep · 使用 regex 式查找文件中的模式
另请参阅:
rg,regex。 更多信息:https://www.gnu.org/software/grep/manual/grep.html。
- 在文件中查找模式:
bash
grep "{{模式字符串}}" {{路径/到/文件1 路径/到/文件2}}- 查找精确的字符串(禁用
regex式):
bash
grep {{[-F|--fixed-strings]}} "{{字符串}}" {{路径/到/文件}}- 在目录中递归查找所有文件中的模式,忽略二进制文件:
bash
grep {{[-rI|--recursive --binary-files=without-match]}} "{{模式字符串}}" {{路径/到/目录}}- 打印每个匹配项周围、之前或之后的 3 行上下文:
bash
grep {{--context|--before-context|--after-context}} 3 "{{模式字符串}}" {{路径/到/文件}}- 打印每个匹配项的文件名和行号,并带彩色输出:
bash
grep {{[-Hn|--with-filename --line-number]}} --color=always "{{模式字符串}}" {{路径/到/文件}}- 仅打印匹配的文本:
bash
grep {{[-o|--only-matching]}} "{{模式字符串}}" {{路径/到/文件}}- 从
stdin(标准输入)中读取数据,不打印匹配模式的行:
bash
cat {{路径/到/文件}} | grep {{[-v|--invert-match]}} "{{模式字符串}}"- 使用扩展
regex式(支持?、+、{}、()和|),不区分大小写模式:
bash
grep {{[-Ei|--extended-regexp --ignore-case]}} "{{模式字符串}}" {{路径/到/文件}}ack · 一个类似 grep 的搜索工具,为程序员优化
另请参阅:
rg。 更多信息:https://beyondgrep.com/documentation/。
- 在当前目录下递归地搜索包含一个字符串或正则表达式的文件:
bash
ack "{{search_pattern}}"- 不区分大小写搜索:
bash
ack {{[-i|--ignore-case]}} "{{search_pattern}}"- 搜索匹配模式的行,只打印匹配的文本,而不打印行的其他部分:
bash
ack {{[-o|--output '$&']}} "{{search_pattern}}"- 限制搜索特定类型的文件:
bash
ack {{[-t|--type]}} {{ruby}} "{{search_pattern}}"- 不在特定类型的文件中搜索:
bash
ack {{[-t|--type]}} no{{ruby}} "{{search_pattern}}"- 输出各文件中的匹配行数(不是匹配文件总数):
bash
ack {{[-c|--count]}} {{[-h|--no-filename]}} "{{search_pattern}}"- 只打印文件名和每个文件的匹配数:
bash
ack {{[-c|--count]}} {{[-l|--files-with-matches]}} "{{search_pattern}}"- 列出所有可与
--type一起使用的值:
bash
ack --help-typesugrep · 超快速搜索工具,带有查询 TUI
- 启动查询 TUI,在当前目录中递归搜索文件(按
<Ctrl z>获取帮助):
bash
ugrep {{[-Q|--query]}}- 在当前目录中递归搜索包含正则表达式搜索模式的文件:
bash
ugrep "{{search_pattern}}"- 在特定文件或特定目录中的所有文件中搜索,并显示匹配的行号:
bash
ugrep {{[-n|--line-number]}} "{{search_pattern}}" {{路径/到/文件或目录}}- 递归搜索当前目录中的所有文件,并打印每个匹配文件的名称:
bash
ugrep {{[-l|--files-with-matches]}} "{{search_pattern}}"- 模糊搜索文件,允许模式中多达 3 个额外、缺失或不匹配的字符:
bash
ugrep {{[-Z|--fuzzy=]}}{{3}} "{{search_pattern}}"- 也递归搜索压缩文件、Zip 和
.tar存档:
bash
ugrep {{[-z|--decompress]}} "{{search_pattern}}"- 仅搜索文件名匹配特定 glob 模式的文件:
bash
ugrep {{[-g |--glob=]}}"{{glob_pattern}}" "{{search_pattern}}"- 仅搜索 C++ 源文件(使用
--file-type=list列出所有文件类型):
bash
ugrep {{[-t |--file-type=]}}cpp "{{search_pattern}}"pdfgrep · 在 PDF 文件中搜索文本
- 在 PDF 中查找与关键词匹配的行:
bash
pdfgrep {{关键词}} {{文件.pdf}}- 包含每个匹配行的文件名和页码:
bash
pdfgrep {{[-H|--with-filename]}} {{[-n|--page-number]}} {{关键词}} {{文件.pdf}}- 对以 "foo" 开头关键词搜索,返回前 3 个匹配项,不区分大小写:
bash
pdfgrep {{[-m|--max-count]}} {{3}} {{[-i|--ignore-case]}} '{{^foo}}' {{文件.pdf}}- 在当前目录中扩展名为.pdf 的文件中递归查找关键词:
bash
pdfgrep {{[-r|--recursive]}} {{关键词}}- 在与当前目录中特定文件名 "*book.pdf" 匹配的文件上递归查找关键词:
bash
pdfgrep {{[-r|--recursive]}} --include '{{*book.pdf}}' {{关键词}}apropos · 在 manpages 中搜索,例如查找一个新命令
另请参阅:
man。 更多信息:https://manned.org/apropos。
- 使用
regex式搜索关键字:
bash
apropos {{正则表达式}}- 搜索时不限制输出到终端宽度:
bash
apropos {{[-l|--long]}} {{正则表达式}}- 搜索与给定的所有表达式都匹配的页面:
bash
apropos {{正则表达式_1}} {{[-a|--and]}} {{正则表达式_2}} {{[-a|--and]}} {{正则表达式_3}}fzf · 命令行模糊查找器
类似于
sk。 更多信息:https://github.com/junegunn/fzf#usage。
- 对指定目录中的所有文件启动
fzf:
bash
find {{路径/到/目录}} -type f | fzf- 为正在运行的进程启动
fzf:
bash
ps aux | fzf- 使用
<Shift Tab>选择多个文件并将结果写入文件:
bash
find {{路径/到/目录}} -type f | fzf {{[-m|--multi]}} > {{路径/到/文件}}- 使用指定查询词启动
fzf:
bash
fzf {{[-q|--query]}} "{{查询词}}"- 对以 core 开头、以 go, rb 或 py 结尾的条目启动
fzf:
bash
fzf {{[-q|--query]}} "^core go$ | rb$ | py$"- 对不匹配 pyc 且完全匹配 travis 的条目启动
fzf:
bash
fzf {{[-q|--query]}} '!pyc travis'继续阅读
- 文件与文本处理完整实践与解答
- 文件与文本处理上手与对象
- 文件与文本处理任务与配置