Shell的一些胡乱总结

2009年5月13日星期三

Shell的一些胡乱总结

$-Shell值比较
-eq数值相等。
-ne数值不相等。
-gt第一个数大于第二个数。
-lt第一个数小于第二个数。
-le第一个数小于等于第二个数。
-ge第一个数大于等于第二个数。
$-反向读取文件流
Usingtaccommands
$-重命名文件
1.mvab不保留原来的文件
2.cpab保留原来的文件
$-读取文件操作操作:
echo"a"test.txt
echo""test.txt
echo"b"test.txt
循环读取文件:
cattest.txt|whilereadline
do
echo$line
done
只读取文件中的某一行:
sed-n'1p'text.txt读第一行数据.
用set获取读取的数据
seta=`sed-n'1p'test.txt`(或:set`sed-n'1p'text.txt`)
echo$1
但是当读取一个空行的时候,不太适用.
如:set`sed-n'2p'test.txt`第二行为空行.set取值的时候是根据空格来计算每个field的。所以在这种情况下,建议还是用循环取值,或者去掉源文件中的空行.
去掉一个文件中的空行:
sed'/^$/d'test.txttest_noblank.txt
grep-v'^$'test.txttest_noblank.txt
去掉一个含空格的空行
sed'/^[[]]*$/d'test.txt
反向读取文件
指令tac

$-比较
echo""test.txt
cattest.txt|whilereadline
do
if[$line='']
thenecho"empty"
fi
done
(注:if[$line='']的格式.注意之间的空格.)
echo"1"test.txt
cattest.txt|whilereadline
do
if[$line!=''$line-eq1]#类型自动转换.'1'--1
thenecho"equal"
fi
done
$-重复行/相同行操作.
echo"a"test.txt
echo"b"test.txt
echo"a"test.txt
去掉本文件的重复行
sort-u-otest_nodupli.txttest.txt
echo"c"mytest.txt
echo"d"mytest.txt
echo"a"mytest.txt
去掉与另一个文件相同的行,并将两个文件合并成一个新文件cattest.txtmytest.txt|sort-o|uniq-uno_duplicated.txt
去掉与另一个文件相同的行,但不合并
catno_duplicated.txttest.txt|sort-o|uniq-dno_dup_single.txt
$-追加,替换...文件内容操作
将一个文件的内容追加到另一个文件的末尾
catmytest.txttest.txt
用一个文件的内容替换另一个文件的内容
catmytest.txttest.txt
将一行文本追加至一个文件末尾
echo"abcdefg"test.txt
$-格式化文本内容
echo"1,2,3,4,5,6/7"test.txt
#去掉所有的逗号
sed's/\,//g'test.txttest_noComma.txt
#将/转换为','
sed's/\//'\''\,'\''/g'test_noComma.txttest_format.txt
想转换后得到一个'字符,那么在shell的正则表示式里面对应'\''
$-SHELL的基本运算
运算符类型
按位运算符
~,,,,|,^
$$[3+2]
$5
但在AIX系统中运行会出错
一种通用的方法:
$expr3+2(注意之间的空格)
(输出)
$5
$INCRE=$INCRE+1(注意空格,自增)
赋值运算符
=、+=、-=、*=、/=、%=、=、^=、|=、=、=

$-传参:
AWK中的参数如何传递

awk-F',''{if($3=='$productid'$4~/'$country'/$5~/'$pricetype'/$11~/'$validto'/$12~/'$released'/)print$0}'$DELETE_RECOVER_FILE_UNIQ$TEMP_CONFILCTED_PRICES_AFTER_INIT_CONVERSION
参数两边注意引号

sed-n"${START_LINES},${PROCESSING_LINES}p"$MN35808956_RDH_BACKUP
注意两边的引号。
打包:
不压缩,只进行归档
(tarxvfplugins.tar)解压tar格式的文件
(tar-tvfmyfile.tar)查看tar文件中包含的文件
压缩并归档
(tarcfzplugins.tar.gzplugins)把plugins目录打包且压缩为plugins.tar.gz文件
(tarzxvfplugins.tar.gz)把plugins.tar.gz解压缩

$-正则表达式
在awk中使用A-Z的时候注意加上[]
awk-F',''{if($5~/[A-Z]/)print$1","$2","$3","$5}'ALL_DELETE.csvPART_1_DELETE.csv

catupcaseChars|tr"[A-Z]""[a-z]"lowcaseChars
如果想匹配符号'那么必须使用'\''转义之后需要用额外的''包裹,否则不与匹配.
随便举个例:
123'456789'(test.txt)把''和包含在它之中的所有内容都清楚掉
cattest.txt|sed's/'\''.*'\''//g'
但是如果是123'456789'123'456789',用上面的方式会把所有从'4开始到9'结束的所有字符给清掉。所以如果只想清除掉'...'和'',而保留123123的话,
cattest.txt|sed's/'\''[0-9]*'\''//g'
注意shell中匹配0-9需要用[0-9]*而不是[0-9]+
'[0-9]\{3\}'--匹配0-9中任意数字三次..注意{}需要转义
Commands-Focus:
grep:
grep-E'219|216'fileName.--如果需要在grep中使用‘与’或‘或’的模式,需要使用-E表明使用扩展模式
国际字符模式匹配或匹配模式的类名形式
[[:upper:]]--[A-Z][[:alnum:]]--[0-9a-zA-Z]
[[:lower:]]--[a-z][[:space:]]--空格或Tab键

0 评论:

发表评论