【shell命令】文本操作命令(grep、cut、sort、uniq、tee、paste、wc、tr、seq、printf、awk、sed、xargs)

grep命令

grep是行过滤工具;用于根据关键字进行行过滤
语法:

grep [选项] '关键字' 文件名

常见选项

  • -i: 不区分大小写
  • -v: 查找不包含指定内容的行,反向选择
  • -w: 按单词搜索
  • -o: 打印匹配关键字
  • -c: 统计匹配到的行数
  • -n: 显示行号
  • -r: 逐层遍历目录查找
  • -A: 显示匹配行及后面多少行
  • -B: 显示匹配行及前面多少行
  • -C: 显示匹配行前后多少行
  • -l:只列出匹配的文件名
  • -L:列出不匹配的文件名
  • -e: 使用正则匹配
  • -E:使用扩展正则匹配
  • ^key:以关键字开头
  • key$:以关键字结尾
  • ^$:匹配空行
  • --color=auto :可以将找到的关键词部分加上颜色的显示

案例

# grep -i root 1.txt 					忽略大小写匹配包含root的行
# grep -w ftp 1.txt 					精确匹配ftp单词
# grep -w hello 1.txt  					精确匹配hello单词;自己添加包含hello的行到文件
# grep -wo ftp 1.txt  					打印匹配到的关键字ftp(-o只打印关键字本身)
# grep -n root 1.txt  					打印匹配到root关键字的行好
# grep -ni root 1.txt  					忽略大小写匹配统计包含关键字root的行
# grep -nic root 1.txt 					忽略大小写匹配统计包含关键字root的行数
# grep -i ^root 1.txt  					忽略大小写匹配以root开头的行
# grep bash$ 1.txt  					匹配以bash结尾的行
# grep -n ^$ 1.txt 				        匹配空行并打印行号
# grep ^# 1.txt 		                        匹配以#号开头的行
# grep -v ^# 1.txt 	                                匹配不以#号开头的行
# grep -A 5 mail 1.txt  	                        匹配包含mail关键字及其后5行(匹配了这一行, 前面5行也打印出来)
# grep -B 5 mail 1.txt  				匹配包含mail关键字及其前5行
# grep -C 5 mail 1.txt 					匹配包含mail关键字及其前后5行

cut命令

cut是列截取工具,用于列的截取
语法:

cut 选项  文件名

常见选项

  • -c: 以字符为单位进行分割,截取
  • -d: 自定义分隔符,默认为制表符\t
  • -f: 与-d一起使用,指定截取哪个区域

案例

# cut -d: -f1 1.txt 			以:冒号分割,截取第1列内容
# cut -d: -f1,6,7 1.txt 	以:冒号分割,截取第1,6,7列内容
# cut -c4 1.txt 				截取文件中每行第4个字符
# cut -c1-4 1.txt 			截取文件中每行的1-4个字符
# cut -c4-10 1.txt 			截取文件中每行的4-10个字符
# cut -c5- 1.txt 				从第5个字符开始截取后面所有字符

sort工具

sort工具用于排序;它将文件的每一行作为一个单位,从首字符向后,依次按ASCII码值进行比较,最后将他们按升序输出。
选项

  • -u :去除重复行
  • -r :降序排列,默认是升序
  • -o : 将排序结果输出到文件中,类似重定向符号>
  • -n :以数字排序,默认是按字符排序
  • -t :分隔符
  • -k :以第N列作为排序条件
  • -b :忽略前导空格。
  • -R :随机排序,每次运行的结果均不同

案例

# sort -n -t: -k3 1.txt 			按照用户的uid进行升序排列
# sort -nr -t: -k3 1.txt 			按照用户的uid进行降序排列
# sort -n 2.txt 						按照数字排序
# sort -nu 2.txt 						按照数字排序并且去重
# sort -n 2.txt -o 3.txt 			按照数字排序并将结果重定向到文件
# sort -R 2.txt 
# sort -u 2.txt 

uniq工具

uniq用于去除连续的重复行

常见选项

  • -i: 忽略大小写
  • -c: 统计重复行次数
  • -d:只显示重复行

案例

# uniq 2.txt 
# uniq -d 2.txt 
# uniq -dc 2.txt 

tr命令

tr(translate)是一个简单但功能强大的字符转换工具,主要用于对输入文本进行字符替换、删除或压缩处理。

tr [选项] SET1 [SET2]

主要功能包括:

  • ​字符替换​:将SET1中的字符替换为SET2中对应的字符
  • ​字符删除​:使用-d选项删除SET1指定的字符
  • ​字符压缩​:使用-s选项将连续重复的字符压缩为单个字符
  • ​补集操作​:使用-c选项处理不在SET1中的字符

字符转换:

# 小写转大写
echo "hello world" | tr 'a-z' 'A-Z'  # 输出: HELLO WORLD
# 大写转小写
echo "HELLO" | tr '[:upper:]' '[:lower:]'  # 输出: hello
# 字母替换(abc→xyz)
echo "abc" | tr 'abc' 'xyz'  # 输出: xyz

字符删除:

# 删除所有数字
echo "h3ll0" | tr -d '0-9'  # 输出: hll
# 删除所有标点
echo "Hello, world!" | tr -d '[:punct:]'  # 输出: Hello world
# 删除换行符(多行合并为一行)
echo -e "line1\nline2" | tr -d '\n'  # 输出: line1line2

字符压缩:

# 压缩连续空格
echo "a  b   c" | tr -s ' '  # 输出: a b c

# 压缩重复字母
echo "hellooo" | tr -s 'o'  # 输出: hello

补集操作:

# 将非数字字符替换为#
echo "123abc456" | tr -c '0-9' '#'  # 输出: 123###456#
# 删除所有非字母字符
echo "hello, 123!" | tr -cd '[:alpha:]'  # 输出: hello
posted @ 2022-08-07 09:55  .Neterr  阅读(555)  评论(0)    收藏  举报