一、文本查看命令
在 linux 处理文本时要用到工具,执行命令和结果很多时候也是文本方式,处理文本三剑客:grep sed awk
1 grep命令
grep查看命令,我们可以从--help获取操作文档。
grep --help
usage: grep [-abcdDEFGHhIiJLlMmnOopqRSsUVvwXxZz] [-A num] [-B num] [-C[num]]
[-e pattern] [-f file] [--binary-files=value] [--color=when]
[--context[=num]] [--directories=action] [--label] [--line-buffered]
[--null] [pattern] [file ...]
例如我想查看package-lock.json文件倒数50行内有关键字version的,只显示上本行和上一行,那么我可以执行组合命令:
tail -50 package-lock.json | grep -C 1 "version"
Aion.Liu $ tail-50 package-lock.json | grep-C1"version""version": "3.0.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", --"is-fullwidth-code-point": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", --"string-width": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", --"strip-ansi": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", --"yargs-parser": { "version": "13.1.2", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", --"camelcase": { "version": "5.3.1", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz",
2 sed命令
sed查看命令,我们可以从--help获取操作文档。
sed --help
「MacOS」
sed: illegal option -- -
usage: sed script [-Ealnru] [-i extension] [file ...]
sed [-Ealnu] [-i extension] [-e script] ... [-f script_file] ... [file ...]
「CentOS(Linux)」
用法: sed [选项]... {脚本(如果没有其他脚本)} [输入文件]...
-n, --quiet, --silent
取消自动打印模式空间
-e 脚本, --expression=脚本
添加“脚本”到程序的运行列表
-f 脚本文件, --file=脚本文件
添加“脚本文件”到程序的运行列表
--follow-symlinks
直接修改文件时跟随软链接
-i[SUFFIX], --in-place[=SUFFIX]
edit files in place (makes backup if SUFFIX supplied)
-c, --copy
use copy instead of rename when shuffling files in -i mode
-b, --binary
does nothing; for compatibility with WIN32/CYGWIN/MSDOS/EMX (
open files in binary mode (CR+LFs are not treated specially))
-l N, --line-length=N
指定“l”命令的换行期望长度
--posix
关闭所有 GNU 扩展
-r, --regexp-extended
在脚本中使用扩展正则表达式
-s, --separate
将输入文件视为各个独立的文件而不是一个长的连续输入
-u, --unbuffered
从输入文件读取最少的数据,更频繁的刷新输出
-z, --null-data
separate lines by NUL characters
--help
display this help and exit
--version
output version information and exit
如果没有 -e, --expression, -f 或 --file 选项,那么第一个非选项参数被视为
sed脚本。其他非选项参数被视为输入文件,如果没有输入文件,那么程序将从标准
输入读取数据。
GNU sed home page: <http://www.gnu.org/software/sed/>.
General help using GNU software: <http://www.gnu.org/gethelp/>.
E-mail bug reports to: <bug-sed@gnu.org>.
Be sure to include the word ``sed'' somewhere in the ``Subject:'' field.
例如,我创建一个文件test.txt,然后写入1234到文件中。
使用命令 sed '1aHello' test.txt将Hello追加到文件中的第一行后面。如果我们没有使用保存模式,那么这个只是预览,再次查看就是没有被写入。
[root@Aion test]# touch test.txt[root@Aion test]# cat test.txt[root@Aion test]#[root@Aion test]# echo "1234" >> test.txt[root@Aion test]# cat test.txt1234[root@Aion test]#[root@Aion test]#[root@Aion test]# sed '1aHello' test.txt1234Hello
3 awk命令
awk查看命令,我们可以从--help获取操作文档。
「MacOS环境下」
awk --help
awk: unknown option --help ignored
awk: no program given
「CentOS(Linux)」
Usage: awk [POSIX or GNU style options] -f progfile [--] file ...
Usage: awk [POSIX or GNU style options] [--] 'program' file ...
POSIX options: GNU long options: (standard)
-f progfile --file=progfile
-F fs --field-separator=fs
-v var=val --assign=var=val
Short options: GNU long options: (extensions)
-b --characters-as-bytes
-c --traditional
-C --copyright
-d[file] --dump-variables[=file]
-e 'program-text' --source='program-text'
-E file --exec=file
-g --gen-pot
-h --help
-L [fatal] --lint[=fatal]
-n --non-decimal-data
-N --use-lc-numeric
-O --optimize
-p[file] --profile[=file]
-P --posix
-r --re-interval
-S --sandbox
-t --lint-old
-V --version
To report bugs, see node `Bugs' in `gawk.info', which is
section `Reporting Problems and Bugs' in the printed version.
gawk is a pattern scanning and processing language.
By default it reads standard input and writes standard output.
Examples:
gawk '{ sum += $1 }; END { print sum }' file
gawk -F: '{ print $1 }' /etc/passwd
3 正则表达式
通配文件内容 相当于扩展通配符,比通配符功能强大,通用,是课程重点
Glob 通配符:通配文件名中的字符,匹配它
通配符有星号*
问号?
中括号[ ]
[wang]这四个字符中的一个字符代表着w a n g的某一个字符
某一个数字:[0-9]
[ [ : d i g i t : ] ] digit 表示数字,两个中号括起来表示某一个数字 lower: 小写字母
uper: 大写字母
alpha: 字母
alnum: 字母加数字 空格 space
4 扩展正则表达式
写法更方便,正则表达式一种
5 vim
文本处理的强大工具,作用相当 nanu