linux shell中字符串的截取

环境:
/bin/bash
Linux localhost 2.6.18-8.el5 #1 SMP Thu Mar 15 19:57:35 EDT 2007 i686 i686 i386 GNU/Linux

对于shell字符串的截取经常忘记,特别是对于指定特定符的从左或右截取,
遂作了一个简单的笔记,方便以后查询,如下。

一、通过 linux shell 内置方法截取字符变量
返回字符串 string 由 start 和 length 参数指定的子字符串。

  • expar substr “$string” start length
  • echo $string | awk ‘{print substr($0, start, length)}’
  • echo $string | cut -c start-length
  • echo $string | dd bs=start count=length 2 > /dev/null

二、通过 linux shell 特性截取。

1、按指定的字符串截取,非常适用于按某特定字符分段的,如 IP

  • ${string##*separator} 从左向右截取最后一个 separator 后的字符串
  • ${string#*separator} 从左向右截取第一个 separator 后的字符串
  • ${string%%separator*} 从右向左截取最后一个 separator 后的字符串
  • ${string%separator*} 从右向左截取第一个 separator 后的字符串

注:
# 从左向右,第一个;
## 从左向右,最后一个;
% 从右向左,第一个;
%% 从右向左,最后一个;
* 是一个正则通配符;

2、根据特定字符偏移和长度截取字符串
${string:start:end}

(注:start 开始下载;end 结束下标。若 end 大于 string 的长度则到结束。不能小于 0)
这样形式的字符串截取非常方便。

发表评论

电子邮件地址不会被公开。 必填项已用*标注