跳转到内容
新建笔记

Linux 文本处理命令

awk、col、colrm、comm、csplit、ed、egrep、ex、fgrep、fmt、fold、grep、ispell、jed、joe、join、look、mtype、pico、rgrep、sed、sort、spell、tr、uniq、vi、wc、vim

awk 是一种强大的文本处理工具。它是一种编程语言,专门用于处理文本数据,特别是用于处理结构化数据,如表格数据。awk 的基本语法格式如下:

终端窗口
awk 'pattern { action }' input-file
  • pattern 是你希望匹配的模式。
  • action 是当模式匹配时执行的操作。
  • input-file 是要处理的文件,如果是从命令行传递的,则可以是 -,表示从标准输入读取。
终端窗口
sed [选项] '指令' 文件
  • [选项]:可以是如 -i 表示直接修改文件,-n 表示仅打印模式匹配的行等。
  • '指令':是 sed 要执行的编辑指令,通常包括模式和操作。
  • 文件:是要处理的输入文件。
命令格式说明用法示例
s/old/new/替换字符串sed 's/apples/oranges/' file.txt(file.txt 要操作的文本)
1,3s/old/new/替换指定范围内的行sed '1,3s/apples/oranges/' file.txt
/pattern/s/old/new/替换匹配模式的行sed '/apple/s/apples/oranges/' file.txt
g替换所有匹配sed 's/apples/oranges/g' file.txt
p打印匹配行sed -n '/apple/p' file.txt
d删除匹配行sed '/apple/d' file.txt
i插入行sed '/apple/i\New line' file.txt
a追加行sed '/apple/a\New line' file.txt
r file从文件中读取行sed '/apple/r file.txt' file.txt
&引用查找到的字符串sed 's/apples/& and oranges/' file.txt
^匹配行首sed 's/^apple/oranges/' file.txt
$匹配行尾sed 's/apple$/oranges/' file.txt
[0-9]匹配数字字符sed 's/[0-9]/X/' file.txt
[^0-9]匹配非数字字符sed 's/[^0-9]/X/' file.txt
\n匹配换行符sed 's/\n/ /' file.txt
\t匹配制表符sed 's/\t/ /' file.txt
\( \)分组sed 's/\(apple\)/\1s/' file.txt
\+ \* ? {}匹配一次或多次、零次或多次、零次或一次、指定次数sed 's/apples\+/oranges/' file.txt

sed 可依照脚本的指令来处理、编辑文本文件。Sed 主要用来自动编辑一个或多个文件、简化对文件的反复操作、编写转换程序等。

终端窗口
sed [-hnV][-e<script>][-f<script文件>][文本文件]

sed是一个流编辑器,它用于对文本进行过滤和变换。其基本语法格式为:

终端窗口
sed 's/查找的文本/替换的文本/' 文件名
  • s:表示替换操作。
  • 查找的文本:是正则表达式,匹配你想要替换的文本。
  • 替换的文本:是你想要用来替换匹配文本的新文本。
  • 文件名:指定要编辑的文件。

参数说明:

  • -e <script> 或 --expression=<script>:使用选项中指定的 sed 脚本处理输入。
  • -f <script 文件> 或 --file=<script 文件>:从指定文件读取 sed 脚本。
  • -h 或—help 显示帮助。
  • -n 或—quiet 或—silent 仅显示 script 处理后的结果。
  • -V 或—version 显示版本信息。

动作说明:

  • a :新增, a 的后面可以接字串,而这些字串会在新的一行出现(目前的下一行)~
  • c :取代, c 的后面可以接字串,这些字串可以取代 n1,n2 之间的行!
  • d :删除,因为是删除啊,所以 d 后面通常不接任何东东;
  • i :插入, i 的后面可以接字串,而这些字串会在新的一行出现(目前的上一行);
  • p :打印,亦即将某个选择的数据印出。通常 p 会与参数 sed -n 一起运行~
  • s :取代,可以直接进行取代的工作哩!通常这个 s 的动作可以搭配正则表达式!例如 1,20s/old/new/g 就是啦!
终端窗口
sed -e 4a\newLine testfile #在 testfile 文件的第四行后添加一行,并将结果输出到标准输出
  • s/:表示进行字符串替换操作。

    /:分隔符,用于分隔待替换的字符串和替换后的字符串。

终端窗口
sed -i "s/cfg\.test\.epoch = .*/cfg.test.epoch = $epoch/" lib/config/config.py

这个命令查找lib/config/config.py文件中形如cfg.test.epoch = 后跟任意字符(.*是一个正则表达式,匹配任意数量的任意字符)的行,并将这整行替换成cfg.test.epoch = $epoch,其中$epoch是循环变量,代表当前迭代的 epoch 值。

  • -i选项告诉sed直接修改文件,而不是输出到标准输出。
  • cfg\.test\.epoch中的反斜杠\用于转义点.,因为在正则表达式中.有特殊含义(匹配任意单个字符),而在这里我们想要匹配字面上的.字符。

查找的文本部分是一个正则表达式,而替换的文本部分则是普通文本,不被解释为正则表达式。

操作说明示例
:set nu显示行号
vsplit、split垂直、水平分屏显示
:u或undo撤销一步或多步
:redo重做

split具体命令解析

命令解释
split水平分割窗口
vsplit垂直分割窗口
Ctrl+w在窗口间跳转
Ctrl+w+h将光标跳转到相邻的左面的窗口(hljk 和在 vim 里面的用法相同)
Ctrl+w+l将光标跳转到相邻的右面的窗口
Ctrl+w+j将光标跳转到相邻的下面的窗口
Ctrl+w+k将光标跳转到相邻的上面的窗口
Ctrl+w+t将光标跳转到最上面的窗口
Ctrl+w+b将光标跳转到最下面的窗口

四、具体命令解析

1、:quit&close

二者都能实现关闭窗口的功能,但是,quit 会关闭最后一个窗口,而 close 不会关闭最后一个窗口。用 close 不用担心不小心退出 vim。

2、:only

此命令可以关闭其他所有窗口。这个命令关闭除当前窗口外的所有窗口。如果要关闭的窗口中有一个没有存盘,Vim 会显示一个错误信息,并且那个窗口不会被关闭。

3、Ctrl-w

如果长按 Ctrl-w 那么光标会不停地在窗口之间跳转。如果眼力好的话可以使用。如果需要精确定位的话可以再加上 hlkj(左右上下)像在 vim 当中是一样的。

4、:split

此命令是分割当前窗口的,所以在使用的时候要注意把光标跳转到你需要分割的哪个窗口上之后再使用此命令。

5、:qall

全部退出,如果任何一个窗口没有存盘,Vim 都不会退出。同时光标会自动跳到那个窗口你可以用 ":write" 命令保存该文件或者 ”:quit!” 放弃修改。

6、:wall

此命令表示 “write all” (全部保存)。但实际上,它只会保存修改过的文件。

7、vim -o one.txt two.txt three.txt

这个命令就是在终端下使用的,就是一次性打开 3 个文件并使用分割形式显示。

set命令是 Bash 脚本的重要环节,却常常被忽视,导致脚本的安全性和可维护性出问题。本文介绍它的基本用法,让你可以更安心地使用 Bash 脚本。

我们知道,Bash 执行脚本的时候,会创建一个新的 Shell。

终端窗口
$ bash script.sh

上面代码中,script.sh是在一个新的 Shell 里面执行。这个 Shell 就是脚本的执行环境,Bash 默认给定了这个环境的各种参数。

set命令用来修改 Shell 环境的运行参数,也就是可以定制环境。一共有十几个参数可以定制,官方手册有完整清单,本文介绍其中最常用的四个。

顺便提一下,如果命令行下不带任何参数,直接运行set,会显示所有的环境变量和 Shell 函数。

终端窗口
$ set
  • set -u:执行脚本的时候,如果遇到不存在的变量,Bash 默认忽略它。set -u就用来改变这种行为。脚本在头部加上它,遇到不存在的变量就会报错,并停止执行

  • set -x:用来在运行结果之前,先输出执行的那一行命令。

  • set -e:根据返回值来判断,一个命令是否运行失败。但是,某些命令的非零返回值可能不表示失败,或者开发者希望在命令失败的情况下,脚本继续执行下去。这时可以暂时关闭set -e,该命令执行结束后,再重新打开set -e。有一个例外情况,就是不适用于管道命令。

    终端窗口
    set +e
    command1
    command2
    set -e

    上面代码中,set +e表示关闭-e选项,set -e表示重新打开-e选项。

  • set -o pipefail用来解决这种情况,只要一个子命令失败,整个管道命令就失败,脚本就会终止执行。

nano 是一个文本编辑器,它比较简单易用,适合初学者。下面是 nano 的一些常用命令和示例:

命令描述示例
nano 文件名打开指定的文件进行编辑nano filename.txt
Ctrl + O保存文件在编辑界面按下 Ctrl + O,然后按 Enter
Ctrl + X退出 nano 编辑器在编辑界面按下 Ctrl + X
Ctrl + G显示帮助文档在编辑界面按下 Ctrl + G
Ctrl + K剪切一行在编辑界面按下 Ctrl + K
Ctrl + U粘贴剪切的内容在编辑界面按下 Ctrl + U
Ctrl + W搜索在编辑界面按下 Ctrl + W,输入要搜索的文本,然后按 Enter
Ctrl + \替换在编辑界面按下 Ctrl + \,输入要替换的文本,然后按 Enter

示例说明:

  1. 打开文件进行编辑:

    终端窗口
    nano filename.txt

    这个命令将打开名为 filename.txt 的文件,如果文件不存在,nano 将创建一个新的文件。

  2. 保存文件: 在编辑界面按下 Ctrl + O,然后按 Enter,这将保存你所做的更改。

  3. 退出 nano 编辑器: 在编辑界面按下 Ctrl + X,这将退出 nano 编辑器。

  4. 显示帮助文档: 在编辑界面按下 Ctrl + G,这将显示 nano 的帮助文档,其中包含其他可用命令的信息。

  5. 剪切和粘贴: 使用 Ctrl + K 剪切一行,然后使用 Ctrl + U 粘贴剪切的内容。

  6. 搜索和替换:

    • 使用 Ctrl + W 进行搜索。输入要搜索的文本,然后按 Enter。
    • 使用 Ctrl + \ 进行替换。输入要替换的文本,然后按 Enter。按 Y 或 N 来确认或拒绝替换。

nano 是一个轻量级且易于使用的文本编辑器,适用于在终端中进行快速编辑。

在 Nano 中,^ 符号代表 Ctrl 键。因此,当你看到 ^C 时,它意味着 Ctrl + C。类似地,M 通常代表 Alt 或 Meta 键。

(1)查找文件中包含某个字符的所有文件:

终端窗口
grep -rnw path_to_directory -e "xxxxx"
-r 或 --recursive: 递归地搜索指定目录中的所有文件。这意味着 `grep` 会搜索指定目录及其所有子目录。
-n 或 --line-number: 在输出中显示匹配行的行号。
-w 或 --word-regexp: 只匹配整个单词,确保搜索的字符串作为独立单词出现,而不是某个更长单词的一部分。
'/path/to/device-tree/directory': 这是要搜索的目录的路径。
-e 'spi0_pins': 使用 `-e` 选项后跟一个模式,这是为了明确指出后面跟的是要搜索的模式。
终端窗口
grep [options] pattern [file...]
  • [options]: grep 的行为可以通过选项进行修改,例如改变输出格式或调整搜索方式。
  • pattern: 这是您正在查找的文本或正则表达式。
  • [file…]: 指定一个或多个文件进行搜索。如果不指定文件,grep 会从标准输入读取数据。