四剑客常用总结
find
`find` 命令在Linux中是一个极其强大的工具,用于在文件系统中搜索符合特定条件的文件和目录。以下是 `find` 命令一些常用的选项:
1. **-name**:按名称查找文件。例如,查找所有扩展名为 `.txt` 的文件:
```bash
find /path/to/search -name "*.txt"
- -type:按照文件类型查找。比如查找所有普通文件:
find /path/to/search -type f
或者查找所有目录:
find /path/to/search -type d
- -size:按照文件大小查找。例如查找大于1MB的文件:
find /path/to/search -size +1M
- -mtime/-atime/-ctime:按文件修改时间、访问时间和状态改变时间查找。例如查找过去7天内修改过的文件:
find /path/to/search -mtime -7
- -perm:按权限查找。例如查找权限位为755的所有文件:
find /path/to/search -perm 755
- -user 和 -group:按照文件所有者和组查找。例如查找属于特定用户的所有文件:
find /path/to/search -user username
- -exec 或 -ok:执行命令对搜索结果进行操作。例如删除所有临时文件:
find /tmp -name "temp*" -exec rm -f {} +
- -empty:查找空文件或空目录:
find /path/to/search -empty
- -maxdepth 和 -mindepth:限制搜索深度。例如只查找当前目录下的文件,不进入子目录:
find . -maxdepth 1 -name "*.log"
- -newer:查找比指定文件新(或者旧)的文件:
find . -newer reference_file
- -depth:先处理子目录中的文件,再处理目录自身。
这些只是 find
命令众多选项中的一部分,实际应用中可根据需要组合不同选项实现复杂的文件搜索和处理任务。
## grep
grep
是 Linux 和类 Unix 系统中一个强大的文本搜索工具,它可以基于正则表达式搜索文件内容。以下是 grep
命令一些常见的选项:
-i
或--ignore-case
:忽略大小写差异,使搜索时不区分大小写。
grep -i "search_text" file.txt
-v
或--invert-match
:反转匹配,输出的是那些不包含匹配模式的行。
grep -v "exclude_text" file.txt
-n
或--line-number
:显示匹配行及其对应的行号。
grep -n "pattern" file.txt
-w
或--word-regexp
:匹配整个词,确保匹配的是完整单词而不是单词的一部分。
grep -w "word" file.txt
-c
或--count
:仅显示匹配行的数量,不显示具体内容。
grep -c "text" file.txt
-r
或--recursive
:递归地搜索指定目录及其子目录中的文件。
grep -r "search_pattern" directory/
-l
或--files-with-matches
:只列出包含匹配项的文件名,而不显示匹配内容。
grep -l "text" *.txt
-A NUM
或--after-context=NUM
:显示匹配行之后的 NUM 行上下文。
grep -A 3 "search_text" file.txt
-B NUM
或--before-context=NUM
:显示匹配行之前的 NUM 行上下文。
grep -B 2 "search_text" file.txt
-C NUM
或--context=NUM
:同时显示匹配行前后各 NUM 行的上下文。
grep -C 2 "search_text" file.txt
-e
或--regexp=PATTERN
:指定要使用的正则表达式模式,当你需要匹配多个模式时,可以多次使用此选项。
grep -e "pattern1" -e "pattern2" file.txt
以上选项可以根据需要组合使用,以便更精确地搜索和筛选文本内容。
## sed
sed
(Stream EDitor)是一个强大的文本流编辑器,在Unix和类Unix系统中广泛使用,尤其适用于对文本流进行逐行处理。以下是一些 sed
命令的常用选项:
-n
或--quiet
或--silent
:取消默认打印行为,只有当使用p
命令显式打印时才会输出行。
sed -n '/pattern/p' file.txt
-i
:直接修改原文件内容,而非仅显示修改后的结果。
sed -i 's/original/replacement/g' file.txt
-e
:允许多个编辑命令在同一行中指定,或者在一个命令行中执行多个操作。
sed -e 's/pattern/replacement/' -e 'd' file.txt
-f script-file
:从指定的脚本文件中读取sed
命令集。
sed -f commands.sed file.txt
-r
或--regexp-extended
:启用扩展正则表达式,使得可以使用更复杂的正则特性。
sed -r 's/(foo|bar)/replacement/g' file.txt
-l
或--line-length=N
(某些版本的sed):设置输出行的最大宽度。-s
或--separate
(GNU sed):将多个文件视为独立的文件而不是连续的输入流。
sed -s '...' file1.txt file2.txt
基本命令示例:
a\
:在当前行后追加文本i\
:在当前行前插入文本c\
:替换整行内容d
:删除匹配的行p
:打印当前行(默认行为,除非使用了-n
)s/old/new/flags
:替换模式,替换文本中匹配的部分y/source/dest
:字符转换,将source中的字符替换成dest中的对应字符
地址定界:
address
:可以是行号(如3
)、行号范围(如1,5
或5,$
表示第五行到末尾)、正则表达式(如/^start/
)等,用来限定命令作用的行范围。
记住,对于大多数 sed
命令,你可以结合 -e
选项一次指定多个命令,也可以通过 -f
加载外部脚本来组织复杂操作。
## awk
awk
是一种强大的文本分析工具,通常用于处理结构化文本数据。以下是 awk
命令的一些常用选项和参数:
-F
或--field-separator
:指定输入字段的分隔符,默认情况下,awk 以空格或制表符作为字段分隔符。例如,如果你的数据是以逗号分隔的,可以这样指定:
awk -F ',' '{print $1, $2}' input.csv
-v
或--assign
:定义 awk 的内建变量。这允许你传递外部 shell 变量到 awk 脚本中,或者初始化 awk 内部变量:
awk -v myvar="$external_var" '{print $0, myvar}' file.txt
-f scriptfile
或--file=scriptfile
:从指定的脚本文件中读取 awk 脚本命令。
awk -f script.awk input.txt
-i inplace
(GNU awk 版本特有):直接修改原文件内容,类似于sed -i
。
gawk -i inplace '{...your code...}' file.txt
-W compat
或--compat
:兼容老版本 awk 的行为。
awk -W compat '{...}' file.txt
基本用法示例:
awk '{print $1}' file.txt
:打印文件中每一行的第一个字段。awk '{if ($1 > 10) print $0}' file.txt
:如果第一字段大于10,则打印整行。awk -F: '{print $1}' /etc/passwd
:以冒号作为分隔符,打印/etc/passwd
文件中每一行的第一字段。
此外,awk 还可以通过内置的正则表达式支持、逻辑判断和循环等功能进行复杂的文本处理。动作块 {...}
中可以编写包括但不限于 print、printf、next、exit、getline 等多种操作指令。
##