|
sort 排序不影响原文件
sort /etc/passwd
sort
-o 文件名:把结果保存在某个文件中
-r (reverse)逆序显示
-n 以数值大小排序
-f 忽略大小写
-u 去掉重复行
-t : -k 默认以空格分割 ,-k 表比较第几段
实例:sort -n -t : -k 3 /etc/passwd
uniq 去掉紧挨着重复的行
uniq -c 显示重复的次数
实例:sort 文件 | uniq -c
-u 不重复的行
-d 重复的行
cut -d: -f7 /etc/passwd |sort |grep -V "^$"|uniq
条件判断
test expression 在if中应用
[ expression ] #[ 1 -gt 2 ] 注意两端空格
` expression ` #` 1 -gt 2 `
链接条件的:
-a 与
-o 或
! 非,取反
短路操作符,连接命令的:
&&
||
比较两个数的大小,显示最大数
#!/bin/bash
[ $1 -gt $2 ] && echo "$1 is the MAX" || echo "$2 is the MAX"
条件测试:
整数测试
-gt
-lt
-ge
-le
-eq
-ne
> >= 不能在[]中用,但能在(())中应用
字符串测试
=等于 [ "$a" = "$b" ]
!=不等于 [ "$a" != "$b" ]
大于 [[ “$a” > “$b” ]]
-z 字符串为"null", 意思就是字符串长度为零
-n 字符串不为"null"
文件测试
-e FILE
-f
-d
-r 读
-w写
-x执行
-L/-h FILE : 是否符号链接文件
—O :测试文件属主是否是你
-G: 属组
[ ! -e /tmp/a ]
[ !-e /tmp/dir ] && mkdir /tmp/dir
diff/patch:
(different)
diff:生成补丁的工具
patch:补补丁的工具
diff vimrc vimrc2 > vimrc.pacth
patch vimrc < vimrc.pacth
patch vimrc2 dir3/
cd dir1
patch -p1 < dir3/
patch -p2 < dir3/a/
aspell check file :检查单词
look 查词库
#look head 查词库
#cat /etc/passwd |tr 'a-z' 'A-Z'
#cat /etc/passwd |tr 'abc' ' '
#cat /etc/passwd |tr 'abc' 'cba'
sed (stream edit)行编辑器
#sed '/root/p' /etc/passwd
#sed '/root/p' /etc/passwd |uniq -d
#sed -n '/root/p' /etc/passwd 只显示匹配到的行
#sed '/root/d' /etc/passwd 删除
#sed 's/root/ROOT/' /etc/passwd 搜索root,替换为ROOT (默认替换每行第一个)
#sed 's/root/ROOT/g' /etc/passwd 替换每行的所有
#sed '1,5s/root/ROOT/g' /etc/passwd 指定1-5行
#sed '10,$s/root/ROOT/g' /etc/passwd 指定10-最后一行
#sed '/root/,/student/s/root/ROOT/g' /etc/passwd 第一个root行到第一个student的行
任何字母符号都可以作为分隔符,这样就不需要 \ 转义了
s/r\(..\)t/R\1T/g
r..t--->r..table
s/r..t/&able/
选项-i 直接编辑源文件(谨慎使用)
#sed -i 's/root/ROOT/g' /etc/passwd (g全局,i忽略大小写;g与i用法一样)
i:行之前加入一行 #sed 's/root/i\enable =0' /etc/passwd
a:行之后加入一行 #sed 's/root/a\enable =0' /etc/passwd
加入多行,用换行符\n #sed 's/root/a\A =2\n B=3' /etc/passwd
选项
-e 指定多个操作
#sed -e 's/root/ROOT/g' -e 's/student/STUDENT/g' /etc/passwd
-f 从文件中读取条件
#sed -f a.txt /etc/passwd
下午:
sed 非交互式,逐行进行
vi 模式化的编辑器
命令模式
输入模式
末行模式
命令-->输入 i ,a
输入-->命令Esc
命令到末行 :
末行到命令 Esc (双击)
打开方式
vim
vim file
退出
:wq
:q
:q!
:w!
命令下退出
tcrl +z
shift +zz (正常退出)
vim +n file 打开后光标在第n行
vim +/pattern file 打开后光标在pattern匹配的位置
命令下:
h, j, k, l
左 下 上 右
行内移动:
^:第一个非空白字符
0(数字):绝对行首
$:绝对行尾
单词为单位
w 下一个单词词首
b 本单词词首,再下单词词首
e (end)本单词词尾,再下单词词尾
行间:
nG 第n行
G 最后一行
:n 第n行
句:)(
段落:}{
w,6w
命令-->输入
i光标前
I 光标行首
a 光标后
A光标行尾
o:光标所在行的下方
O:光标所在行的上方
c 删除后再插入状态
C 删除一行进入插入
3C
3cw
c) ; c(
c{ ; c}
替换:
r 替换光标所在的字符
R 进入替换模式
删除:
x 删除光标所在字符(向后) 3x
X 删除光标所在字符(向前)
d
dd
ndd
D(删除后保留空白)
nD 删除n行
dw (删除了单词后的空格)
de (不删除了单词后的空格)
复制粘贴:
y : yy 3yy y$
p 复制一整行,就在光标下一行开始粘贴(不是一行,就在光标处粘贴)
P 复制一整行,就在光标上一行开始粘贴
剪切:d -- p
:10,90y
:.,+100 当前光标到下100行
:.,$-1 当前到倒数第二行
:%d 全文删除
可视模式:选择块
v字符为单位
V行为单位(对角线为单位的矩形块)
{
查询:
/
?
/\
/\$[[:upper:]]\{1,\}
n 下一个
N 上一个
}
查找并替换(sed用法)
:addr1,addr2s///gi
:%s/\/REDHAT/gi
:%s/^#//g 把#去掉
撤销 u U(撤销最近一次所有)
Ctrl +r 撤销上次的撤销
重做 :
.(不能重做撤销命令)
:%s/^[[:space:]]*#[[:space:]]*.*$//g
%s/^.*#.*$//g
:%s/^\(\([[:space:]]\)*[^[:space:]]\{1,\}\2\)#.*/\1/g 删除中间有#号的后面的部分(包括#)
vim a b c d
:next
:prev
:first
:last
vim -o a b 竖直
ctrl + w w
:colse
-O 水平
vim a
:vsplit (水平打开同一个文件的vi界面)
:close (关闭)
定制vim显示
:set nu
在家目录
vim .vimrc
set un
autoindent自动缩进
:set autoindent
#vimtutor 打开vim课程
shell 算数运算
$((expression))
$[expression]
let
a=2
b=3
let a+=$b
let a++
选择分支,三类
if [] ;then
..
..
..
fi
if [] ;then
..
..
else
..
..
fi
if [] ;then
..
elif [];then
..
elif [];then
..
else
...
fi
嵌套
case
循环分支
while
for
until
for Var in list ;do
..
..
..
done
let sum=0
for I in 1 2 3 4 5 6 ;do
let sum+=$I
for I in $(seq 1 100);do
let sum+=$I
done
echo "The sum is :$sum"
for I in { 1..100};do
let sum+=$I
done
echo "The sum is :$sum"
#ping -c1 -W2 192.168.0.254
for循环
1)如何ping c类网
2)如何ping b类网
while [] ;do
...
...
done
let i=0
let sum =0
while [ $i -et 100 ] ;do
let sum+=$i
let i+=2
echo $sum
done
3)通过键盘输入用户名,判断用户是否存在,如果存在,就显示用户默认的shell
vim sum.sh
echo "please..."
read A
echo "please..."
read B
echo $(($A+$B))
read -p " ...." A
while read line;do
...
done |
|
|