我的shell笔记(一)
时间:2007-12-09 来源:swordofchina
最近看了unix shell编程
sed 's/Unix/UNIX/' file 将第一个Unix换成UNIX
sed 's/Unix?UNIX/' file 将所有的Unix换成UNIX
sed -n '1,2p' file 只显示前两行
sed -n '/UNIX/p' file 只打印包含UNIX的行
sed '1,2d' file 删除第一行和第二行
sed '/UNIX/d' file 删除包含UNIX的各行
sed '5d' 删除第5行
sed '/[Tt]est/d' 删除包含test或ZTest的行
sed -n '20,25p' file 只显示文件file的第20行到第25行
sed '1,10s/unix/UNIX/g' file 把file前10行中的unix改为UNIX
sed '/jan/s/-1/-5/' 将所有包含jan的行中第1个-1改为-5
sed 's/...//' file 删除file文件每一行的前3个字符
sed 's/...$//' file 删除data文件每一行的最后3个字符
unix shell 第二章
shell的匹配规则
星号*匹配0个或以上的字符
?匹配正好一个字符
[0-9]匹配0到9中的一个字符,前一个字符序号必须小于后一个字符的
[!a-z]匹配除小写字母以外的任何字符
[a-np-z]匹配所有以a到n或p到z中的一个字母
一行键入多条命令,命令之间用分号分隔: $data;pwd
命令发送到后台:在键入的命令后加上一个&号,该命令就发送到后台执行,也就是说
该命令不再占住终端: $ firefox &
grep
可以用正规表达式给grep指定模式。如 $ grep '[tT]he' file
grep -v 'UNIX' file 显示file中所有不包含UNIX的行
grep -l 'move_history' *,c 列出包含mov_history的文件
grep -n 'move_history' testch.c 在匹配的行前加行号
sort
sort -u names 在输出结果中去除重复的行
sort -r names 反序排序
sort names -o names_sorted 写排序后的结果写入names_sorted文件中
sort -n data sort的-n选项表示把行中的第一个字段当作数值,数据按算术方法排序
sort +1n data 排序时跳过第一个字段 +6n表示跳过每行前6个字段
sort +2n -t: /etc/passwd 按用户标识排序 -t表示将其后的:当作分隔符,不成为一个字段
hell程序中注释,需在注释行前加#号
shell允许把值存在变量中.shell变量名以字母或下划线字符开始.如:variable=value.注意:等号的任何一边不能加空格.shell没有任何数据类型的概念.当向shell变量赋值时,不管值是什么,shell都简单地将它理解为字符串.
$字符是shell的特殊字符,如果$后跟一个合法的变量名,shell会把它当作在此处用变量所存储的值来替换的指令.如echo $count时,shell会把$count替换成count所存的值,然后执行echo命令.
假定把一个文件名存在变量filename中.如果想将该文件重命名,新文件名就是在原文件名后加一个X,可以用 mv $filename ${filename}X
单引号
告诉shell忽略包含的所有的特殊字符,将单引号中的内容看作整体作为一个参数
双引号
括在双绰号中的以下三种特殊字符不被忽略: 美元符号 反引号 反斜杠
如:
$x=*
$echo $x
显示当前目录下的文件
$echo '$x'
$x
$echo "$x"
*
反斜杠
反斜杠去掉它后面字符的特殊意义,如:
$echo "\$x"
$x
$echo "THe Value of x is \"$x\""
THe Value of x is "5"
$echo \\
\
$echo '\'
\
shell把行尾的反斜杠作为续行,它去掉跟在后面的换行字符,也不把换行字符当作参数分隔符。
这种结构在分几行键入命令时经常使用。
命令替换
命令替换是指shell能够将一个命令的标准输出插在一个命令行中任何位置的功能。
1)反引号
用法:`command`
$echo the date and time is : `date`
the date and time is wed aug 28 14:28:43 edt 2007
2)$(...)结构
用法:$(command)
$echo the date and time is : $(date)
括号中不限于执行一条命令,如果把命令用分号隔开,可以执行多条命令;也可以使用管道线.
这种结构比反引号好.首先,复杂的命令中组合使用正,反引号很难看懂;第二,$()结构容易嵌套,这样可以在命令替换中进行命令替换,
尽管用反引号也能进行嵌套,但比较难处理.
expr 命令
expr 1 + 2
每一个操作符和操作数都必须分别用参数传给expr,故expr 1+2 是错误的
sed 's/Unix/UNIX/' file 将第一个Unix换成UNIX
sed 's/Unix?UNIX/' file 将所有的Unix换成UNIX
sed -n '1,2p' file 只显示前两行
sed -n '/UNIX/p' file 只打印包含UNIX的行
sed '1,2d' file 删除第一行和第二行
sed '/UNIX/d' file 删除包含UNIX的各行
sed '5d' 删除第5行
sed '/[Tt]est/d' 删除包含test或ZTest的行
sed -n '20,25p' file 只显示文件file的第20行到第25行
sed '1,10s/unix/UNIX/g' file 把file前10行中的unix改为UNIX
sed '/jan/s/-1/-5/' 将所有包含jan的行中第1个-1改为-5
sed 's/...//' file 删除file文件每一行的前3个字符
sed 's/...$//' file 删除data文件每一行的最后3个字符
unix shell 第二章
shell的匹配规则
星号*匹配0个或以上的字符
?匹配正好一个字符
[0-9]匹配0到9中的一个字符,前一个字符序号必须小于后一个字符的
[!a-z]匹配除小写字母以外的任何字符
[a-np-z]匹配所有以a到n或p到z中的一个字母
一行键入多条命令,命令之间用分号分隔: $data;pwd
命令发送到后台:在键入的命令后加上一个&号,该命令就发送到后台执行,也就是说
该命令不再占住终端: $ firefox &
grep
可以用正规表达式给grep指定模式。如 $ grep '[tT]he' file
grep -v 'UNIX' file 显示file中所有不包含UNIX的行
grep -l 'move_history' *,c 列出包含mov_history的文件
grep -n 'move_history' testch.c 在匹配的行前加行号
sort
sort -u names 在输出结果中去除重复的行
sort -r names 反序排序
sort names -o names_sorted 写排序后的结果写入names_sorted文件中
sort -n data sort的-n选项表示把行中的第一个字段当作数值,数据按算术方法排序
sort +1n data 排序时跳过第一个字段 +6n表示跳过每行前6个字段
sort +2n -t: /etc/passwd 按用户标识排序 -t表示将其后的:当作分隔符,不成为一个字段
hell程序中注释,需在注释行前加#号
shell允许把值存在变量中.shell变量名以字母或下划线字符开始.如:variable=value.注意:等号的任何一边不能加空格.shell没有任何数据类型的概念.当向shell变量赋值时,不管值是什么,shell都简单地将它理解为字符串.
$字符是shell的特殊字符,如果$后跟一个合法的变量名,shell会把它当作在此处用变量所存储的值来替换的指令.如echo $count时,shell会把$count替换成count所存的值,然后执行echo命令.
假定把一个文件名存在变量filename中.如果想将该文件重命名,新文件名就是在原文件名后加一个X,可以用 mv $filename ${filename}X
单引号
告诉shell忽略包含的所有的特殊字符,将单引号中的内容看作整体作为一个参数
双引号
括在双绰号中的以下三种特殊字符不被忽略: 美元符号 反引号 反斜杠
如:
$x=*
$echo $x
显示当前目录下的文件
$echo '$x'
$x
$echo "$x"
*
反斜杠
反斜杠去掉它后面字符的特殊意义,如:
$echo "\$x"
$x
$echo "THe Value of x is \"$x\""
THe Value of x is "5"
$echo \\
\
$echo '\'
\
shell把行尾的反斜杠作为续行,它去掉跟在后面的换行字符,也不把换行字符当作参数分隔符。
这种结构在分几行键入命令时经常使用。
命令替换
命令替换是指shell能够将一个命令的标准输出插在一个命令行中任何位置的功能。
1)反引号
用法:`command`
$echo the date and time is : `date`
the date and time is wed aug 28 14:28:43 edt 2007
2)$(...)结构
用法:$(command)
$echo the date and time is : $(date)
括号中不限于执行一条命令,如果把命令用分号隔开,可以执行多条命令;也可以使用管道线.
这种结构比反引号好.首先,复杂的命令中组合使用正,反引号很难看懂;第二,$()结构容易嵌套,这样可以在命令替换中进行命令替换,
尽管用反引号也能进行嵌套,但比较难处理.
expr 命令
expr 1 + 2
每一个操作符和操作数都必须分别用参数传给expr,故expr 1+2 是错误的
相关阅读 更多 +