Linux下实现字符串截取方法总结

Linux下实现字符串截取,大体上可以分为两种,使用命令实现截取,使用工具实现截取。具体截取方式如下:

a、#截取,可以实现删除左边字符,保留右边字符

从左边第一个</>开始,删除</>及之前的所有字符

str=http://www.baidu.com/index.html
echo ${str#*/}        # right first /
输出:
     /www.baidu.com/index.html

b、##截取,可以实现删除左边字符,保留右边字符

从最右边的</>开始,删除</>及之前的所有字符

str=http://www.baidu.com/index.html
echo ${str##*/}        # rightest /
输出:
     index.html

c、%截取,可以实现删除右边字符,保留左边字符

从右边第一个</>开始删除</>及右边的所有字符

str=http://www.baidu.com/index.html
echo ${str%/*}        # left firft /
输出:
     http://www.baidu.com

d、%%截取,可以实现删除右边字符,保留左边字符

从左边第一个</>开始删除</>及右边的所有字符

str=http://www.baidu.com/index.html
echo ${str%%/*}        # leftest /
输出:
     http:

e、区间截取

截取第0~6个字符

str=http://www.baidu.com/index.html
echo ${str:0:6}
输出:
     http:/

f、正向区间截取到结束

截取从第7个字符开始到结束

str=http://www.baidu.com/index.html
echo ${str:7}
输出:
     www.baidu.com/index.html

g、反向区间截取

截取倒数第0到第7个字符的前5个

str=http://www.baidu.com/index.html
echo ${str:0-7:5}
输出:
     ex.ht

h、反向截取,到结束

从倒数第10个字符截取到字符串结束

str=http://www.baidu.com/index.html
echo ${str:0-10}
输出:
     index.html

i、使用cut命令实现字符串截取

     cut [选项]
          选项:     -b  ----> 字节
                   -c  ----> 字符
                   -f  ----> 域
已创建一个文件,内容如下:
[[email protected] 3_26]$ cat file
abcdefg
1234567
poiuytr

使用cut截取的例子如下:

[[email protected] 3_26]$ cat file | cut -b 3
c
3
i
[[email protected] 3_26]$ cat file | cut -b -3
abc
123
poi
[[email protected] 3_26]$ cat file | cut -b 3-
cdefg
34567
iuytr
[[email protected] 3_26]$ cat file | cut -b 3-5
cde
345
iuy
[[email protected] 3_26]$ cat file | cut -b 3-5,7
cdeg
3457
iuyr

对于单字节而言,-b和-c似乎作用是一样的,但是如果文本内出现中文的情况下,-c是可以正确输出一个汉字的,但使用-b选项输出的却是乱码,因为一个中文是两个字节。为了解决这个问题,通常-b选项和-n选项配合使用,-n用于告诉cut要截取的是n字节字符。

下面解释域<-f>的作用。在/etc/passwd文件中保存了所有的用户信息,仔细了解过的话,可以发现,每一长串是通过 : 分隔开的。我们可以认为该文件中的数据是以 : 分隔不同的域。指定域分隔符使用的是 -d 选项,-f后跟的数字格式和-b完全一致。【cut的域分隔符只能是一个字符】

[[email protected] 3_26]$ cat /etc/passwd | head -n 5
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
[[email protected] 3_26]$ cat /etc/passwd | head -n 5 | cut -d : -f 1
root
bin
daemon
adm
lp

多余说一点,看下面的例子

[[email protected] 3_26]$ ps
  PID TTY          TIME CMD
 5630 pts/2    00:00:00 bash
 5739 pts/2    00:00:00 ps
[[email protected] 3_26]$ ps | cut -b 4
I
3
4
4

明明只有三行,却cut出了四个行内容,原因就在与每个命令其实都是父bash单独创建的一个进程,cut也不例外(内置命令除外)。

-----muhuizz整理

时间: 2024-12-20 01:07:23

Linux下实现字符串截取方法总结的相关文章

shell下的字符串截取方法

一.Linux shell截取字符串的前几位,例截取前8位: 方法如下:下面a=1234sterrerwrwretw 1.expr substr "$a" 1 8 2.echo $a|cut -c1-8 3..echo $a|dd bs=1 count=8 二.按指定字符串截取 1.第一种方法: 1> ${val##*string} (双#*截取) 从左向右截取最后一个string后的字符串 例:a=123stringrwtw134string456 2>${varible

linux下shell脚本执行方法及exec和source命令

exec和source都属于bash内部命令(builtins commands),在bash下输入man exec或man source可以查看所有的内部命令信息. bash shell的命令分为两类:外部命令和内部命令.外部命令是通过系统调用或独立的程序实现的,如sed.awk等等.内部命令是由特殊的文件格式(.def)所实现,如cd.history.exec等等. 在说明exe和source的区别之前,先说明一下fork的概念. fork是linux的系统调用,用来创建子进程(child

php中文字符串截取方法实例总结

本文实例总结了php中文字符串截取方法,非常实用的技巧.具体方法分析如下: 1.使用mbstring扩展库的mb_substr截取就不会出现乱码了. 2.自己书写截取函数,但效率不如用mbstring扩展库来得高. 3.如果仅是为了输出截取的串,可用如下方式实现:substr($str, 0, 30).chr(0). substr()函数可以分割文字,但要分割的文字如果包括中文字符往往会遇到问题,这时可以用mb_substr()/mb_strcut这个函 数,mb_substr()/mb_str

Swift字符串截取方法的改进

字符串截取方法是字符串处理中常用的基本方法.熟悉iOS的朋友都知道在基础类的NSString中有substringToIndex:,substringFromIndex:以及substringWithRange:这三种基本的截取方法. 问题描述: 那么,Swift语言中的String类是否有同样的截取功能呢? 反复查看String类的头文件,并没有找到相同或相似的函数接口. 直接在swift文件里也不能对一个String类的变量调用上面的方法. 然而通过引入基础框架,即 import Found

linux下的ImageMagick安装方法

 linux下的ImageMagick安装方法  由于没有图形化界面的支持,在Linux(CentOS 6.4 x64)上的配置相对Windows XP还是麻烦了一点.   1.下载ImageMagick和JMagick的源文件(http://downloads.jmagick.org/6.4.0/):ImageMagick-6.4.0.-0tar.gz   2.解压并安装ImageMagick: # tar xzvf ImageMagick-6.4.0-0.tar.gz # cd ImageM

【iOS】Swift字符串截取方法的改进

字符串截取方法是字符串处理中经常使用的基本方法.熟悉iOS的朋友都知道在基础类的NSString中有substringToIndex:,substringFromIndex:以及substringWithRange:这三种主要的截取方法. 问题描写叙述: 那么,Swift语言中的String类是否有相同的截取功能呢? 重复查看String类的头文件.并没有找到同样或相似的函数接口. 直接在swift文件中也不能对一个String类的变量调用上面的方法. 然而通过引入基础框架,即 import F

swift中字符串截取方法(substring)

下面介绍2种swift的字符串截取方法,实际上用到了substringFromIndex,substringToIndex,substringWithRange 1.将String转化为NSString再截取,代码如下:  var s="1234567890"var ns1=(s as NSString).substringFromIndex(5)var ns2=(s as NSString).substringToIndex(4)var ns3=(s as NSString).sub

OC字符串截取方法

OC字符串常用截取方法 1 /** 2 * substringFromIndex:字符串截取方法,从某索引开始截取到最后 3 * substringToIndex:从索引0开始截取到某索引 4 * substringWithRange:从某索引开始,截取一定长度的字符 5 * substringByReplacingOccurrencesOfString:字符串替换 6 */ 7 #import <Foundation/Foundation.h> 8 9 int main(int argc,

在Linux下禁用IPv6的方法小结

在Linux下禁用IPv6的方法小结--http://www.jb51.net/LINUXjishu/335724.html 这篇文章主要介绍了在Linux下禁用IPv6的方法小结,禁用IPv6的操作还是考虑到目前和IPv4的兼容性问题,需要的朋友可以参考下 Pv6被认为是IPv4——互联网上的传统32位地址空间——的替代产品,它用来解决现有IPv4地址空间即将耗尽的问题.然而,由于已经有大量主机.设备用IPv4连接到了互联网上,所以想在一夜之间将它们全部切换到IPv6几乎是不可能的.许多IPv