豆包ko 发表于 2018-8-25 11:27:16

1212 sort\sed\vim\shell-Stephen

  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/-hFILE :是否符号链接文件
  —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查词库
  #lookhead查词库
  #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 -fa.txt /etc/passwd
  下午:
  sed 非交互式,逐行进行
  vi模式化的编辑器
  命令模式
  输入模式
  末行模式
  命令-->输入 i ,a
  输入-->命令Esc
  命令到末行 :
  末行到命令 Esc   (双击)
  打开方式
  vim
  vimfile
  退出
  :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   3yyy$
  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 -oa 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))
  $
  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 &quot;The sum is :$sum&quot;
  for I in { 1..100};do
  let sum+=$I
  done
  echo &quot;The sum is :$sum&quot;
  #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 &quot;please...&quot;
  read A
  echo &quot;please...&quot;
  read B
  echo $(($A+$B))
  read -p &quot; ....&quot;A
  while read line;do
  ...
  done
页: [1]
查看完整版本: 1212 sort\sed\vim\shell-Stephen