unix字符串截取(总结)
### Unix字符串截取方法详解 在Unix环境下进行字符串截取是一项常见的操作需求,尤其是在处理文本文件、日志分析等场景中。本文将详细介绍几种常用的字符串截取方法:`cut`命令、`sed`命令以及`expr`命令,并通过具体实例进行讲解。 #### 一、`cut` 命令 `cut`命令是Unix/Linux系统中用于从行中剪切字段或字符的一种工具。其基本语法格式为: ```bash cut [选项] 文件 ``` 其中,常用选项包括: - `-c list`:指定要提取的字符列表。 - `-f field`:指定要提取的字段。 - `-d delimiter`:指定字段分隔符,默认为制表符(Tab)。 **示例:** 1. **提取指定字符:** - `cut -c1,5-7 文件`:提取第1个字符以及第5到第7个字符。 - `cut -c1-50 文件`:提取前50个字符。 **例如**: ```bash echo "ab_cd_df_fr_tg_dd" | cut -c2-4 ``` 输出结果为`b_c`。 2. **提取指定字段:** - `cut -f1,5 文件`:提取第1和第5个字段。 - `cut -f1,10-12 文件`:提取第1和第10到12个字段。 **例如**: ```bash echo "ab_cd_df_fr_tg_dd" | cut -f1-2 -d'_' ``` 输出结果为`ab_cd`。 **注意**:`-f` 和 `-c` 参数不能同时使用。 #### 二、`sed` 命令 `sed`(stream editor)是一个强大的流式文本编辑器,它可以用来执行基本的文本转换和过滤任务。 **基本语法格式:** ```bash sed 's/模式/替换文本/g' 文件 ``` **示例:** 1. **提取特定长度的文本:** - `sed 's/^..(\{5\}).*/\1/' 文件`:从每个匹配的行中提取第3个字符后的5个字符。 - `sed 's/^..(\{7\}).*/\1/' 文件`:从每个匹配的行中提取第3个字符后的7个字符。 **例如**: ```bash echo "thisisatest" | sed 's/^..(\{5\}).*/\1/' ``` 输出结果为`isis`。 #### 三、`expr` 命令 `expr`命令可以用来执行表达式的计算和文本模式匹配。 **基本语法格式:** ```bash expr 字符串 : '正则表达式' ``` **示例:** 1. **提取特定长度的文本:** - `expr "abcdefg" : '..(\{5\}).*'`:提取字符串中第3个字符之后的5个字符。 **例如**: ```bash expr "abcdefghijklmn" : '..(\{5\}).*' ``` 输出结果为`defgh`。 ### 总结 通过对`cut`、`sed`和`expr`三个命令的学习,我们可以灵活地对Unix环境下的字符串进行截取操作。这些命令各有特点: - `cut`命令适用于简单快速地提取固定位置的字符或字段; - `sed`命令功能更加强大,可以进行复杂的文本处理和转换; - `expr`命令虽然简单,但在某些场景下能够实现高效且精确的文本模式匹配。 掌握了这些命令,不仅可以在日常工作中提高效率,还能应对各种复杂的字符串处理需求。希望本文能帮助大家更好地理解和应用这些命令。
***************************字符串的剪切********************************************
cut用来从标准输入或文本文件中剪切列或域。剪切文本可以将之粘贴到一个文本文件。
cut一般格式为:
cut [options] file1 file2
下面介绍其可用选项:
-c list 指定剪切字符数。
-f field 指定剪切域数。
-d 指定与空格和tab键不同的域分隔符。
-c 用来指定剪切范围,如下所示:
-c1,5-7 剪切第1个字符,然后是第5到第7个字符。
-c1-50 剪切前50个字符。
-f 格式与-c相同。
-f1,5 剪切第1域,第5域。
-f1,10-12 剪切第1域,第10域到第12域。
************************************************************************************
appfjuat@misdev15:/export/home/appfjuat/yk $echo yyyy_tttt | cut -f 1 -d "_"
yyyy
-f field 指定剪切域数。
-d 指定与空格和tab键不同的域分隔符。
appfjuat@misdev15:/export/home/appfjuat/yk $echo ab_cd_df_fr_tg_dd | cut -f 1-2 -d _
ab_cd
appfjuat@misdev15:/export/home/appfjuat/yk $echo ab_cd_df_fr_tg_dd | cut -f 2-4 -d _
cd_df_fr
综上,这个意思就是:-d后面的字符为字符串ab_cd_df_fr_tg_dd的分隔符,就是用这个分隔符把这个字符分成若干部分,每一部分为一个域,从1,2,3,4.......开始
-f就是指定要剪切刚才分的域中的第几个域,这个指定的剪切的域就是返回的剪切出来的字符串
-------------------------------------------------
appfjuat@misdev15:/export/home/appfjuat/yk $echo '123456' | cut -f 2 -d 1
23456
- pantera_death2014-11-18总结得不错,顶一个
- light_forever2013-05-13写的还不错 但不是我想要的东西
- gdwjch2014-10-29感觉还不错
- 粉丝: 0
- 资源: 5
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- (源码)基于SimPy和贝叶斯优化的流程仿真系统.zip
- (源码)基于Java Web的个人信息管理系统.zip
- (源码)基于C++和OTL4的PostgreSQL数据库连接系统.zip
- (源码)基于ESP32和AWS IoT Core的室内温湿度监测系统.zip
- (源码)基于Arduino的I2C协议交通灯模拟系统.zip
- coco.names 文件
- (源码)基于Spring Boot和Vue的房屋租赁管理系统.zip
- (源码)基于Android的饭店点菜系统.zip
- (源码)基于Android平台的权限管理系统.zip
- (源码)基于CC++和wxWidgets框架的LEGO模型火车控制系统.zip