shell 字符串处理
来源:互联网 发布:php订单系统 编辑:程序博客网 时间:2024/09/21 06:32
在shell中遇到字符串问题,首先考虑的是grep ,sed ,awk , cut
不先讲这几个命令了,先来看一下字符串截取中用简单方法就能做到的事情 ${}
(1)shell中的单引号比双引号的区别:单引号关闭所有有特殊作用的字符,而双引号只要求shell忽略大多数,具体的说,就是①美元符号②反引号③反斜杠,这3种特殊字符不被忽略(2)求字符串长度 ----- (1)expr $x:‘.*’(2)${#x}
(3)求字符串子串 ----- ${x:$pos:$len},其中$pos位置,$len长度,其中$len可省略
(4)字符串替换 ----- ${x/a/b} 用b替换a ; ${x//a/b}用b替换所有的a
(5)字符串首尾截取----- ${x##*/}去掉所有/左边的字符,也可用其它匹配代替*/ ${x#*/}只去掉第一次出现/左边所有的字符。顺序为从左到右.${x%%/*}去掉所有/右边的字符,${x%/*}去掉第一次出现/右边的字符,顺序为从右到左.
eg,#!/bin/bash
y=kdjfkd:dfkdjfkd:8888:9899899:kdjfkdfj
q=`echo $y | cut -d":" -f4` //以:截取,取第四个字段即9899899
m=${q##*8} //去掉所有8左边的字符
echo $m
n=${q#*8} //去掉第一个8左边的字符
echo $n
result:99
99899
(6)Shell数组定义 a=(1 2 3 4),不能有空格,比如a =(1 2 3 4)和a=(1 2 3 4)都是不允许的。
(7)数组长度: ${#a[@]}或者 ${#a[*]} ;全部数组 ${a[@]}或{$a[*]}返回1 2 3 4
(8)数组元素的长度 ${#a[i]},i为下标,和其它语言一样,从0开始,数组元素${a[i]}
(9)awk默认使用空格作为域分隔符,
"+"和"?"只适用awk而不适用sed和grep
awk条件操作符:<,<=,>=,==,!=,~,!~
awk字符串处理函数:gsub(r,s),gsub(r,s,t),index(s,t)等
awk自定义环境变量:FILENAME,FNR,FS,NF,NR等
awk -F : '{print $1}' /etc/passwd 打印第一列的值, $0 打印全部的值
awk -F : 'BEGIN {print "name passwd\n-----------------"} {print $1"\t"$5}'END {print "End of file"}' /etc/passwd 输出增加头尾
awk '{if($0~/root/) print $0}' /etc/passwd输出匹配"root"的行,等价于awk '$0~/root/' /etc/passwd
(10)无论命令是什么?sed并不与初始化文件打交道,它操作的只是文件的一个拷贝。如果不重定向到一个文件,直接在标准输出(显示屏)显示。
搜索替换是sed的拿手好戏。
sed -n '1,$p' /etc/passwd 打印从1到最后一行的所有内容
sed -e '/root/=' /etc/passwd打印出现"root"的行号和所有行
sed -n '/root/=' /etc/passwd只打印行号
sed -n -e '/root/p' /etc/passwd 只打印出现"root"的匹配行
sed -n -e '/root/p' -e '/root/=' /etc/passwd 打印匹配行和行号
sed 's/^M//g' /etc/passwd 删除行尾控制字符(^M)= ctrl+v+m
sed 's/^0*//g' /etc/passwd 删除行首的多个零
(11)grep 一般用来搜索字段或字串,sed用来搜索或者替换,awk可以进行复杂的运算和定制操作
(12)先不要管Shell的版本,来看看Shell 变量,在Shell中有三种变量:系统变量,环境变量,用户变量
系统变量:
$# 传递到脚本的参数个数;
$$脚本运行的当前进程id;
$?最后命令的退出状态,0表成功;
$!上一个命令的PID ;
$@ 以"参数1" "参数2" ... 形式保存所有参数 ;
$* 以"参数1 参数2 ... " 形式保存所有参数 ;$0表示脚本名称
用户变量:用set命令查看
环境变量:用setenv查看
(13)不同的shell版本有不同数组赋值方法,而bourne shell (如bash)中不支持数组方式。
(14)查看目录或者文件,符号链接:ls -l | grep '^d' 或者 ls -l | grep '^-',ls -l | grep '^l'
(15)查看最后一列的指:ls -l | grep '^l' | awk '{print $NF}' (默认以空格分隔),在awk中,NF表示字段数,$NF表示最后一个字段
- shell处理字符串记录
- shell字符串处理
- shell的字符串处理
- Shell处理字符串方法
- shell字符串处理
- shell 字符串处理
- Shell的字符串处理
- Shell的字符串处理
- Shell的字符串处理
- shell的字符串处理
- shell 字符串处理
- shell 字符串处理
- shell 字符串处理
- shell字符串处理相关
- shell字符串处理
- shell 字符串处理汇总
- shell编程字符串处理
- shell 字符串处理
- 为什么大型互联网应用选择Java+Linux
- 在eclipse中 Android SDK 无法打开模拟器问题
- 端口80被Microsoft-HTTPAPI/2.0占用的解决办法
- 无线网络通信技术完全介绍
- Java中日期类的总结
- shell 字符串处理
- 立足本土以快见长,移动信息化服务商取胜之道
- TCP Client实现对mysql的操作
- Android localsocket 的基础和使用实践: 01
- jstl 应用
- spring项目中遇到的问题
- JDBC连接数据库
- 不要KPI?别逗了!
- arm-linux 交叉编译 mp4v2