Linux中常用的文本处理命令(echo、sort、uniq、tr、cut、split、eval)(下)

本文涉及的产品
转发路由器TR,750小时连接 100GB跨地域
简介: 1、echo命令——输出echo 命令主要用来显示字符串信息。


4.1 tr命令的一般使用

示例1:

[root@yuji ~]# echo abc | tr 'a-z' 'A-Z'     //将所有小写字母替换为大写
 ABC
 [root@yuji ~]# echo abc | tr 'a' 'A'         //将小写a替换为大写A
 Abc
 [root@yuji ~]# echo abc | tr -t 'a' 'A'      //将小写a替换为大写A
 Abc
 [root@yuji ~]# echo "192.168.80.10" | tr '.' ' '    //将.替换为空格
 192 168 80 10
复制代码


网络异常,图片无法展示
|


示例2:

[root@yuji ~]# echo abc| tr "abc" "123"
 123
 [root@yuji ~]# echo abc| tr "ab" "123"
 12c
 [root@yuji ~]# echo abc| tr "abc" "12"
 122
复制代码


网络异常,图片无法展示
|

示例3:

-c,保留字符集1的字符,其他字符包括换行符\n用字符集2替换。

[root@yuji ~]# echo -e "abc\ncba\nab"
 abc
 cba
 ab
 [root@yuji ~]# echo -e "abc\ncba\nab" | tr -c "ab" "0"
 ab000ba0ab0[root@yuji ~]#
 [root@yuji ~]# echo -e "abc\ncba\nab" | tr -c "ab\n" "0"
 ab0
 0ba
 ab
复制代码


网络异常,图片无法展示
|


示例4:

-d,删除所有属于字符集1的字符。

[root@yuji ~]# echo "hello world"
 hello world
 [root@yuji ~]# echo "hello world" | tr -d " "
 helloworld
 [root@yuji ~]# echo "hello world" | tr -d "lo"
 he wrd
复制代码


网络异常,图片无法展示
|


示例5:

-s,将连续重复的字符串压缩成一个。

[root@yuji ~]# echo "hhhi woooorld"
 hhhi woooorld
 [root@yuji ~]# echo "hhhi woooorld" | tr -s "h"
 hi woooorld
 [root@yuji ~]# echo "hhhi woooorld" | tr -s "ho"
 hi world
 [root@yuji ~]# echo "hhhi woooorld" | tr -s "ho" "z"
 zi wzrld
复制代码


网络异常,图片无法展示
|


示例6:生成12位随机码

tr -dc "字符集1":符合字符集1的部分不做处理,其他字符进行删除。

[root@yuji ~]# cat /dev/urandom | tr -dc '[:alnum:]' | head -c12
 RvKGD5mNqOJz[root@yuji ~]#
 #/dev/urandom         //非阻塞的随机数产生器,它会重复使用熵池中的数据以产生伪随机数据
 #tr -dc '[:alnum:]'   //保留数字和英文字母,其他字符全都删除
 #head -c12            //显示前12个字符
复制代码


网络异常,图片无法展示
|


4.2 分行输出环境变量PATH中包含的所有目录

使用tr命令,将冒号(":")替换为换行符("\n")

[root@yuji ~]# echo $PATH
 /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
 [root@yuji ~]# echo $PATH | tr ":" "\n"
 /usr/local/sbin
 /usr/local/bin
 /usr/sbin
 /usr/bin
 /root/bin
复制代码


网络异常,图片无法展示
|


4.3 过滤出文件中的非空行

方法1、使用tr命令删除文件中的空行(即压缩换行符)

方法2、使用grep命令过滤非空行。

[root@yuji ~]# cat 4.txt
 11
 22
 33
 [root@yuji ~]# cat 4.txt| tr -s "\n"       //将连续的换行符压缩成一个
 11
 22
 33
 [root@yuji ~]# cat 4.txt| grep -v "^$"     //过滤出非空行
 11
 22
 33
复制代码


网络异常,图片无法展示
|


5、cut命令——截取字段或字符串

用于显示行中的指定部分,删除文件中指定字段。

命令格式:

cut [选项] 参数
cat file | cut [选项] 参数
复制代码


常用选项:

选项 作用
-d 指定分隔符(默认分隔符为Tab)
-f n 按字段进行截取。指定第n个字段;1-3表示从第1个字段到第3个字段;1,4,7表示第1、第4、第7个字段
-b 以字节为单位进行截取
-c 以字符为单位进行截取
–complement 排除所指定的字段
–output-delimiter 更改输出内容的分隔符


示例:

1)-d 指定分隔符,-f 按字段进行截取。

网络异常,图片无法展示
|


2)-f,连续的字段使用"-"连接,不连续的字段之间使用逗号。

网络异常,图片无法展示
|


3)–complement,排除所指定的字段。

网络异常,图片无法展示
|


4)–output-delimiter,更改输出内容的分隔符。

网络异常,图片无法展示
|


截取字符串的常用方法:

常用的三种方法:

1.${i:起始下标值:截取长度}      
 #i是变量,字符的下标值从0开始。例如 ${i:0:2} 
 2.echo $i | cut -c 1-3
 #-c表示按字符截取,字符下标值从1开始,起始位置-终止位置。1是起始位置,3是终止位置。
 3.expr substr $i 1 3 
 #下标值从1开始。1代表起始位置,3代表截取的字符长度。
复制代码


示例:

i=123456789,要求截取3456。

[root@yuji ~]# i=123456789
 [root@yuji ~]# echo ${i:2:4}     //从下标值为2的字符开始截取,共截取4个字符
 3456
 [root@yuji ~]# echo $i | cut -c 3-6    //截取第3到第6个字符
 3456
 [root@yuji ~]# expr substr $i 3 4    //从第3个字符开始截取,共截取4个字符
 3456
复制代码


网络异常,图片无法展示
|


网络异常,图片无法展示
|


6、split命令——拆分文件

split命令用于在Linux下将大文件拆分为若干小文件。

语法格式:

split 选项 参数 原始文件 拆分后文件名前缀
复制代码


常用选项:

选项 作用
-l 指定行数
-b 指定大小

示例:

以3行对文件进行拆分,最后一个文件的行数如果没有3行,则以实际行数进行分配。

[root@yuji tt]# cat num.txt
 1
 2
 3
 4
 5
 6
 7
 8
 9
 10
 [root@yuji tt]# split -l 3 num.txt num    //以3行对文件进行拆分
 [root@yuji tt]# ls
 numaa  numab  numac  numad  num.txt
 [root@yuji tt]# cat numaa
 1
 2
 3
 [root@yuji tt]# cat numab
 4
 5
 6
 [root@yuji tt]# cat numac
 7
 8
 9
 [root@yuji tt]# cat numad     //最后一个文件的行数如果没有3行,则以实际行数进行分配
 10
复制代码


网络异常,图片无法展示
|


网络异常,图片无法展示
|


7、eval命令——扫描命令2次

命令字前加上eval,shell会在执行命令之前扫描它两次,eval命令首先会先扫描命令行进行所有的置换,然后再执行命令,该命令适用于那些一次扫描无法实现功能的变量,该命令会对变量进行两次扫描。

示例1:

[root@yuji ~]# echo "hello world">file
 [root@yuji ~]# cat file
 hello world
 [root@yuji ~]# myfile="cat file"
 [root@yuji ~]# echo $myfile     //输出变量myfile的值
 cat file
 [root@yuji ~]# eval $myfile    //扫描命令2次,先将myfile置换成"cat file",之后执行"cat file"
 hello world
复制代码


网络异常,图片无法展示
|


示例2:

[root@yuji ~]# cat demo.sh
 #!/bin/bash
 eval echo $$#    //先将$$#置换成$5(即\$置换成$,$#置换成参数个数5),之后执行“echo $5”,即输出第5个位置参数的值
 [root@yuji ~]# bash demo.sh 1 2 3 4 5
 5
复制代码


网络异常,图片无法展示
|


示例3:

[root@yuji ~]# a=100
 [root@yuji ~]# b=a
 [root@yuji ~]# eval echo $$b  //先将$$b置换成$a(即\$置换成$,$b置换成a),之后执行echo $a
 100
 [root@yuji ~]# eval $b=50
 [root@yuji ~]# echo $a
 50
复制代码


网络异常,图片无法展示
|

相关文章
|
21天前
|
存储 Linux
linux echo 写入文件
通过这些技巧和示例,你可以灵活运用 `echo`命令,无论是进行简单的文本输出还是复杂的文件操作,都能在Linux环境中游刃有余。
37 1
|
2月前
|
机器学习/深度学习 Linux Perl
Linux文本处理三剑客之sed详解
这篇博客详细讲解了Linux中的文本处理工具sed的使用方法和常用命令。
160 9
Linux文本处理三剑客之sed详解
|
3月前
|
Linux PHP
Linux CentOS 宝塔 Suhosin禁用php5.6版本eval函数详细图文教程
【8月更文挑战第27天】本文介绍两种禁用PHP执行的方法:使用`PHP_diseval_extension`禁用和通过`suhosin`禁用。由于`suhosin`不支持PHP8,仅适用于PHP7及以下版本,若服务器安装了PHP5.6,则需对应安装`suhosin-0.9.38`版本。文章提供了详细的安装步骤,并强调了宝塔环境下与普通环境下的PHP路径差异。安装完成后,在`php.ini`中添加`suhosin.so`扩展并设置`executor.disable_eval = on`以禁用执行功能。最后通过测试代码验证是否成功禁用,并重启`php-fpm`服务生效。
43 2
|
3月前
|
Linux BI 数据处理
在Linux中,如何使用awk和sed进行文本处理?
在Linux中,如何使用awk和sed进行文本处理?
|
4月前
|
Shell Linux C语言
|
4月前
|
存储 数据挖掘 Linux
Linux命令split详解:大文件处理的得力助手
`split`命令是Linux用于将大文件分割成小文件的工具,常用于日志处理、备份。它支持按行数(-l)、字节数(-b)分割,并能自定义输出文件名(-a, -d)。例如,`split -b 10M largefile.txt smallfile_`会按10MB切割`largefile.txt`,生成`smallfile_`开头的文件。注意确保磁盘空间充足,避免文件名冲突,并备份原始文件。结合其他命令使用,能提高文件管理效率。
|
5月前
|
Linux Perl
Linux命令split的使用方法说明
【6月更文挑战第11天】Linux命令split的使用方法说明
113 4
|
4月前
|
存储 Unix Linux
探索Linux中的sed命令:强大的文本处理工具
`sed`是Linux/Unix的流编辑器,用于文本替换、删除、新增等操作,无需直接编辑文件。它逐行处理输入,存储在模式空间,执行脚本后输出。主要特点是非交互、支持正则表达式和简洁语法。示例:`sed 's/apple/orange/g' example.txt`替换文本,`/error/d`删除包含"error"的行,`a\---`在每行后加"---"。使用时注意备份、测试命令和理解正则表达式。
|
5月前
|
数据挖掘 Unix Linux
探索Linux中的强大文本处理工具——dgawk
dgawk,GNU awk的增强版,是一款强大的Linux文本处理工具,擅长模式扫描和数据提取。它提供复杂文本分析、易用性、可定制脚本及高效处理大文件的能力。基本语法为`dgawk 'pattern { action }' file`。通过打印、模式匹配、字段操作、BEGIN/END块及自定义函数等功能,用户能高效处理文本数据。掌握dgawk能提升文本分析效率,对系统管理员和数据分析师尤其有用。
|
4月前
|
Shell Linux
Linux环境变量之shell中export定义全局变量和echo 变量的区别
Linux环境变量之shell中export定义全局变量和echo 变量的区别