- 创建,销毁
mkdir 创建文件夹
rmdir 删除文件夹
rm 删除文件
- Shell 值比较
-eq 数值相等。
-ne 数值不相等。
-gt 第一个数大于第二个数。
-lt 第一个数小于第二个数。
-le 第一个数小于等于第二个数。
-ge 第一个数大于等于第二个数。
- 反向读取文件流
Using tac commands
Example:
$ tac test.txt | grep exception
- 重命名文件
1. mv a b 不保留原来的文件
2. cp a b 保留原来的文件
- 读取文件操作操作:
echo "a" > test.txt
echo "" >> test.txt
echo "b" >> test.txt
循环读取文件:
cat test.txt | while read line
do
echo $line
done
只读取文件中的某一行:
sed -n '1p' text.txt 读第一行数据.
用 set 获取读取的数据
set a = ` sed -n '1p' test.txt ` (或: set ` sed -n '1p' text.txt `)
echo $1
但是 当 读取 一个空行的时候,不太适用.
如: set ` sed -n '2p' test.txt ` 第二行为空行. set 取值的时候是根据 空格来计算每个 field的。 所以 在这种情况下,建议还是用循环取值, 或者去掉源文件中的空行.
去掉一个文件中的空行:
sed '/^$/d' test.txt > test_noblank.txt
grep -v '^$' test.txt > test_noblank.txt
去掉一个含空格的空行
sed '/^[[]]*$/d' test.txt
反向读取文件
指令 tac
- 比较
echo "" > test.txt
cat test.txt | while read line
do
if [ $line = '' ]
then echo "empty"
fi
done
(注: if [ $line = '' ] 的格式. 注意之间的空格.)
echo "1" >> test.txt
cat test.txt | while read line
do
if [ $line !='' && $line -eq 1 ] # 类型自动转换. '1' --> 1
then echo "equal"
fi
done
判断是否是数字
if [ "${INPUT_NUM##[0-9]*}" = "" ]
- 重复行/相同行 操作.
echo "a" > test.txt
echo "b" >> test.txt
echo "a" >> test.txt
去掉本文件的重复行 sort -u -o test_nodupli.txt test.txt
echo "c" > mytest.txt
echo "d" > mytest.txt
echo "a" > mytest.txt
去掉与另一个文件相同的行,并将两个文件合并成一个新文件
cat test.txt mytest.txt | sort -o | uniq -u > no_duplicated.txt
去掉与另一个文件相同的行,但不合并
cat no_duplicated.txt test.txt | sort | uniq - d > no_dup_single.txt
- 追加,替换... 文件内容操作
将一个文件的内容追加到另一个文件的末尾
cat mytest.txt >> test.txt
用一个文件的内容替换另一个文件的内容
cat mytest.txt > test.txt
将一行文本追加至一个文件末尾
echo "abcdefg" >> test.txt
- 格式化文本内容
echo "1,2,3,4,5,6/7" > test.txt
# 去掉所有的逗号
sed 's//,/ /g' test.txt > test_noComma.txt
# 将 / 转换为 ','
sed 's'/''/,'/''/g' test_noComma.txt > test_format.txt
想转换后得到 一个 ' 字符,那么在shell 的 正则表示式 里面对应 '/''
- SHELL 的基本运算
运算符类型
按位运算符 ~, <<, >>, &, |, ^
#求和
$ $[3 + 2]
$ 5
但在 AIX 系统中运行会出错
一种通用的方法:
$ expr 3 + 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
注意两边的引号。 - 打包:
不压缩,只进行归档
(tar xvf plugins.tar) 解压tar格式的文件
(tar -tvf myfile.tar )查看tar文件中包含的文件
压缩并归档
(tar cfz plugins.tar.gz plugins) 把plugins目录打包且压缩为plugins.tar.gz文件
(tar zxvf plugins.tar.gz) 把plugins.tar.gz解压缩 - 正则表达式
在 awk 中使用 A-Z 的时候注意加上 []
awk -F',' '{if( $5 ~ /[A-Z]/ ) print $1","$2","$3","$5}' ALL_DELETE.csv > PART_1_DELETE.csv
cat upcaseChars | tr "[A-Z]" "[a-z]" > lowcaseChars
如果 想匹配 符号 ' 那么 必须 使用 '/'' 转义之后需要用额外的 '' 包裹,否则不与匹配.
随便举个例:
123'456789'(test.txt中的内容) 把 '' 和包含在它之中的所有内容都清楚掉
cat test.txt | sed 's/'/''.*'/''//g'
但是 如果 是 123'456789'123'456789', 用上面的方式 会把 所有 从'4 开始到 9' 结束的所有字符给清掉。 所以 如果只想清除掉 '...' 和'' , 而保留123123的话,
cat test.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键
[[:digit:]] <--> [0-9] [[:alpha:]] <--> [a-zA-Z]
- 时间差计算
begintime=`date +%s`
endtime=`date +%s`
duration=expr $begintime - $endtime
(+%s 或者 +%S均可)