Chinaunix首页 | 论坛 | 博客
  • 博客访问: 76762
  • 博文数量: 33
  • 博客积分: 647
  • 博客等级: 上士
  • 技术积分: 290
  • 用 户 组: 普通用户
  • 注册时间: 2011-10-20 12:37
文章分类

全部博文(33)

文章存档

2014年(1)

2012年(31)

2011年(1)

我的朋友

分类: 系统运维

2012-02-09 10:35:44

1. 字符大小写转换
小写 =》 大写 
echo hello |tr [:lower:] [:upper:] 
echo "$STR" | sed y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/
echo hello|awk '{print toupper($0)}' #some solaris not support
大写 =》 小写
echo HELLO |tr [:upper:] [:lower:] #
echo "$STR" | sed y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/
echo HELLO |awk '{print tolower($0)}' #some solaris not support
2. 删除空行,空白字符等
sed  ‘/^$/d’ file 去掉空行
sed '/./!d' 删除所有空行
sed 's/^[ \t]*//g' 删除行首空行或制表符
sed 's/[ \t]*$//g' 删除行尾空行或制表符 有的系统不识别\t,这样的话,输入制表符,输入方式为:ctrl+v ctrl+i
sed 's/^M//g'  ^ ctrl+v   M ctrl+m 的方式输入
dos2unix file 删除windows ^M
3. Sed 技巧
sed 's/Release/&add/g' new-notes  #在Release字符后面追加字符串add
sed '/Release notes/r release-notes' README.temp > README #在README.temp文件中含有Release notes的行下插入文件release-notes的内容
sed -e '/string1/,//d'  #删除string1,string2之间的行
sed -e '/.xsd$/b' -e '/.wsdl$/b' -e d file 含有字符串xsd和wsdl的行都提取出来

*替换
sed ‘s/word1/word2/2′ file 将第2行中的word1替换为word2
sed ‘s/word1/word2/g’ file word1全局替换为word2
sed -n ‘s/word1/word2/p’ file 全局替换并打印
sed ‘s/word1/word2/w test’ file 全局替换并写入文件test
sed ‘s/\/bin\/bash/\/bin\/sh/’ /etc/passwd 路径替换 特殊字符需要转义
sed ‘s!/bin/bash!/bin/sh!’ /etc/passwd 同上 感叹号被用作定界符
sed ‘ns/word1/word2/’ file 指定替换file文件中的第n行
sed ‘m,ns/word1/word2′ file 指定替换file文件中的第m到n行
sed ‘n,$s/word1/word2′ file 指定替换file文件中的第n到最后一行
sed ‘/word1/s/bash/sh/’ file 指定替换出现word1行的bash替换为sh
sed -e 's/
sed ‘n{
>s/word1/word2
>s/word3/word4
}’ file 指定替换第n行中的word1为word2 word3为word4
sed ‘s/word1/word2/;s/word3/word4/’ file 同上
sed ‘n,${
>s/word1/word2
>s/word3/word4
}’ file 指定替换从第n开始到最后一行结束的word1为word2 word3为word4
sed -e ‘n,$s/word1/word2/;s/word3/word4/’ file 同上
*删除
sed ‘d’ file 清空所有数据流(不是清空file文件内容)
sed ‘nd’ file 删除第n行
sed ‘m,nd’ file 删除第m到n行
sed ‘n,$d’ file 删除从n到最后一行
sed ‘/word1/d’ file 删除匹配word1的行
sed '/./!d' 删除所有空行
sed  ‘/^$/d’ file 去掉空行
sed 's/[ \t]*$//g' 删除行尾空行或制表符 有的系统不识别\t,这样的话,输入制表符,输入方式为:ctrl+v ctrl+i
sed 's/^[ \t]*//g'
WINDOWS传到UNIX在每行的结尾可能会出现^M
sed 's/^M//g'  ^ ctrl+v   M ctrl+m 的方式输入
*插入
sed ‘nirhel007′ file 将rhel007插入到第n行之前
sed ‘nathis is a test’ file 将this is a test 插入到第n行之后
sed ‘$irhel007′ file 插入到最后一行之前
sed ‘$arhel007′ file 插入到最后一行之后
sed 's/^/diff /g' ant.list #每行行首加入字符串diff
ed 's/$/ >> dd.list/g' ant.list #每一行末尾加入字符串>> dd.list
*更改
sed ‘ncthis is a test’ file 将第n行更改为this is a test
sed ‘/this is a test/cthat is a test’ file 匹配更改
*变换
sed ‘y/123/456/’ test
匹配修改 1-4,2-5,3-6 单个字符进行全局匹配
*打印
sed -n ‘/word/p’ file 全局匹配打印
sed -n ‘m,np’ file 打印m到n行
sed ‘=’ file 打印行号
sed -n ‘l’ file 打印不可打印的ANSIC字符
sed -n ‘np’ file 打印第n行
sed -n ‘$p’ file 打印最后一行
*文件操作
sed ‘m,nw test’ file 将file的m到n行写入到test中
sed -n ‘/word/w test’ file 匹配将包含word字符的写入test文件
sed ‘nr test’ file 将test文件中的内容写入file文件的第n行之后
sed ‘/word/r test’ file 将test文件中的内容匹配到word内容之后
sed ‘$r test’ file 将test文件中的内容追加到file的最后
sed -n ‘{
1!G
h
$p
}’ file 行逆序
sed -n ‘s/cat/”cat”/’ file 给文本中的cat增加双引号
sed -n ‘s/.at/”&”/g’ file 给文本中的.at的原单词上增加双引号
sed ‘G’ file 增加一行空行
sed ‘$!G’ file 在文本的最后一行不再增加空行
sed ‘/^$/d;$!G’ file 文本中的空行不增加行距
sed ‘=’ file 行计数
sed ‘=’ file | sed ‘N;s/\n/ /’ 计数和行在同一行上
sed -n ‘s/<[^>]*>//g;/^$/d’ file 去除html中的标签和空行
*sed正则表达式
1. .*{}[]^$\+?| 这些特殊的字符需要用\转义
2. 定位符
sed -n ‘/^test/p’ file 匹配test开头的行
sed -n ‘/test$/p’ file 匹配test结尾的行
sed -n ‘/^this is a test$/p’ 匹配以test开头和结尾的行
sed -n ‘/^$/d’ file 去掉空行
3 点字符
sed -n ‘/.li/p’ file 匹配除了换行之外的所有字符
4 字符类
[]代表或者的意思
sed -n ‘/[ch]at/p’ file 匹配hat或者cat的单词
sed -n ‘/[Yy][Ee][Ss]/p’ 匹配任何形式的yes
sed -n ‘/[c-h]at/p’ file
sed -n ‘/[a-ch-m]/p’ file 匹配a-c,h-m开头的单词
sed -n ‘/^[0-9][0-9][0-9][0-9][0-9][0-9]$/p’ 匹配邮编,电话
5 否定字符类
sed -n ‘/[^ch]at/p’ 不匹配以cat和hat开头的单词
sed -n ‘/cat/!p’ 不匹配匹配cat的行
4 find
find com \(  -name *.jsp -o -name *.gif  \) | sed 's/\(.*\)\/.*/..\/resources\/\1/p'  | uniq | xargs -I '{}' mkdir -p {} 获取文件目录,并在../resources目录下创建目录
find com \( -name *.jsp -o -name *.gif  \) -exec svn mv {} ../resources/{} \; 把文件移入到目录../resources

★ find xargs 
find -exec command 方式,其中command命令的参数只有一个{}才可,如果需要多次用到参数{},则换用xargs -i 或-I命令
例如:find . -name "*.properties" -exec cp {} ../ \;  可以成功拷贝
      find . -name "*.properties" -exec cp {} ../{} \; 不能拷贝
 find . -name "*.properties" | xargs -i cp {} ../{} 可以成功拷贝
 
 加-i 参数直接用 {}就能代替管道之前的标准输出的内容;
 find . -type f -name "*.txt" | xargs -i cp {}  /tmp/k/
 加 -I 参数 需要事先指定替换字符
 find . -type f -name "*.txt" | xargs -I '{}' cp {}  /tmp/n/
★awk  
awk的BEGIN和END模式:
BEGIN模式意味着在读取第1行之前的匹配模式。它常用于初始化,例如设置分隔符、打印标题以及变量赋初值等。END模式是在处理完所有记录行以后的匹配模式。它常常用于输出结果。
awk '/g/ && /fw/ {print $0}' grept.txt #输出匹配2个字符串的行
awk '$2=="bbb" || $2=="ccc" {print $0}' filename #输出第二个字段匹配任何一个字符串的行
awk '/g/ || /fw/ {print $0}' grept.txt #输出匹配任何一个字符串的行
awk '{if ($4 == "test" || $4 == "provided") {print $1"," $2"," $3", no"} else {print $1"," $2"," $3",yes"}}' pom.xml  #如果$4是test 或者provided则输出no,否则输出yes

awk 'NR>1&&//{print ""}{printf $0}END {print ""}' #分组文件,按到下一个之间的行组合为一行
★接收用户输入参数
比如:type和id都是必须的参数,如果则输入了其一,则程序过程中提示输入,接收用户输入后,程序继续进行
read -p "prompt message"  var 是把提示信息及输入参数值放在一行。
效果等同于:echo "prompt message" 
          read var


阅读(958) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~