一、字符串截取

str="abcdef"

expr substr "$str" 1 3  # 从第一个位置开始取3个字符, abc

expr substr "$str" 2 5  # 从第二个位置开始取5个字符, bcdef 

expr substr "$str" 4 5  # 从第四个位置开始取5个字符, def

echo ${str:2}           # 从第二个位置开始提取字符串, bcdef

echo ${str:2:3}         # 从第二个位置开始提取3个字符, bcd

echo ${str:(-2)}        # 从倒数第二个位置向左提取字符串, abcde

echo ${str:(-2):3}      # 从倒数第二个位置向左提取3个字符, cdestr="abbc,def,ghi,abcjkl"

echo ${str#a*c} #,def,ghi,abcjkl一个井号(#)表示从左边截取掉最短的匹配 (这里把abbc字串去掉)

echo ${str##a*c} #jkl两个井号(##)表示从左边截取掉最长的匹配(这里把abbc,def,ghi,abc字串去掉)

echo ${str#"a*c"}     # 空,因为str中没有子串"a*c"echo $[str##"a*c"}      # 空,同理

echo ${str#d*f)    # abbc,def,ghi,abcjkl, echo ${str#*d*f}        # ,ghi,abcjkl   

echo ${str%a*l}         # abbc,def,ghi  一个百分号(%)表示从右边截取最短的匹配 

echo ${str%%b*l}        # a             两个百分号表示(%%)表示从右边截取最长的匹配

echo ${str%a*c}         # abbc,def,ghi,abcjkl  


二、正则表达式

grep -v 显示关键字以外的内容 

     -n 显示行号  -r 遍历所有目录(用于在目录下搜索的时候)  -h不显示目录绝对路径

      ‘k\{2\}' 表示关键字为2个连续的k


sed -i表示sed操作的结果直接保存到原文档里

sed '10p' -n filename 输出第10行内容      sed '2,8' -n filename 输出第2到第8行内容

sed '10d'    filename  删除第10行内容     sed '2,8d' filename   删除第2到第8行内容

sed 's#bash#abcd#g' filename  把bash全局替换成abcd

应用例子:

sed '5,10s#[0-9a-Z]##g' filename    把第5到第10行的数字和字母删除

sed 's#\(^[^:]*\)\(:.*:\)\([^:]*\)#3\2\1#g' /etc/passwd   首尾的内容互换


awk