【linux之sed及vim】

一、sed

sed 文本处理工具 流编辑器 行编辑器
保留空间
模式空间
sed不会影响原文件的内容,它处理的是它载入模式空间的内容

 

sed [options].."AddressCommand" FILENAME

sed -n 1,3p /etc/passwd

 

Address:

 1. # :文件中的第#行(数字所代表的那一行)
    $ :最后一行
 2. #,# :从第#行到第#行的连续范围,如:2,5就标识从第二行到第五行
 3. /pattern/:被正则表达式匹配的行
 4./pattern1/,/pattern2/:从被pattern1匹配的行开始到被pattern2匹配的行结束
 5.#,+N : 从某一行开始向后再选择N行 如:2,+5
 

 

options:

    -n : 只处理被模式匹配到的行,并不能使用默认的P命令
    -r :支持扩展的正则表达式
    -i :替代,会改变原文件的内容
    -e :可以写多个表达式。如:-e 表达式1 -e 表达式2 如: sed -e '2d' -e '4d' test
    -f : 脚本名称 :将脚本文件中包含的命令全部执行
    

 

command:

 p:显示,默认的命令
 d:删除
 a \string:追加string内容(匹配行后面)
 i \string:在匹配行前面添加内容
 r FILENAME:读取一个文件,将文件内容加载到匹配行后面
 w:将匹配的内容另存为某个文件
 s/pattern/string/修饰符:将模式匹配的内容替换为string,根据修饰符来替换  sed @@@ sed ###
     默认只换一行
     修饰符: g 所有  如: sed 's@\@#@g' fstab

     如: sed 's/l\(..e\)/L\1/g'

 

sed -n 1,3p /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin

 

ed练习:
  1)删除/etc/grub.conf文件中行首的空白符;
  sed -r 's/^[[:space:]]+//g' /etc/grub.conf
  2)替换/etc/inittab文件中"id:3:initdefault:"一行中的数字为5;
  sed -r 's/id:[0-9]:initdefault/id:5:initdefault/g' /etc/inittab
  3)删除/etc/bashrc文件中的空白行;
  sed -r '/^$/d' /etc/bashrc 
  4)删除/etc/inittab文件中开头的#号; 
  sed -r 's/^#//g' /etc/inittab 
  5)删除某文件中开头的#号及后面的空白字符,但要求#号后面必须有空白字符;
vim test.txt
cat test.txt
#abc
# hello world
   # hi world

sed -r 's/^#[[:space:]]+//g' ./exercise.txt
  6)删除某文件中以空白字符后面跟#类的行中的开头的空白字符及#;
  sed -r 's/^[[:space:]]+#+//g' test.txt

  7)取出一个文件路径的目录名称;
#!/bin/bash
  if [ $# -ne 1 ];then
   echo "usage:test7.sh FILEPATH"
  fi
  echo $1 | sed -r 's@(/.*)*/.*@\1@g'

  8)取出一个文件路径的基名。
  #!/bin/bash
  if [ $# -ne 1 ];then
   echo "usage:test7.sh FILEPATH"
  fi
  echo $1 | sed -r 's@/.**/(.*)@\1@g'

 

补充:

basename $0 查看文件本身

 

二、vim编辑器

文本编辑工具 vi nano emacs
vi(visual interface)
vim (VI improved)
两个程序,推荐用vim,有语法高亮
which vi vim
/bin/vi
/usr/bin/vim

全屏编辑器,模式化编辑器

 

vim模式:
编辑模式(命令模式)
输入模式
末行模式

 

1、模式转换

编辑-->输入:
    i: 在当前光标所在字符的前面,转为输入模式;
    a: 在当前光标所在字符的后面,转为输入模式;
    o: 在当前光标所在行的下方,新建一行,并转为输入模式;
    
    I:在当前光标所在行的行首,转换为输入模式
    A:在当前光标所在行的行尾,转换为输入模式
    O:在当前光标所在行的上方,新建一行,并转为输入模式;

输入-->编辑:
    ESC
    
编辑-->末行:
    :/ ?

末行-->编辑:
    ESC, ESC    Enter   BackSpace

 

2、打开文件

# vim /path/to/somefile
    vim +# :打开文件,并定位于第#行 
    vim +:打开文件,定位至最后一行
    vim +/PATTERN : 打开文件,定位至第一次被PATTERN匹配到的行的行首

    默认处于编辑模式

 

3、关闭文件

1、末行模式关闭文件
:q  退出
:wq 保存并退出
:q! 不保存并退出
:w 保存
:w! 强行保存
:wq --> :x
2、编辑模式下退出 ZZ: 保存并退出 ZQ: 不保存退出

 

4、移动光标(编辑模式)

1、逐字符移动:
    
    h: 左 j: 下 k: 上 l: 右
        
   #h: 移动#个字符;
 
2、以单词为单位移动
    w: 移至下一个单词的词首
    e: 跳至当前或下一个单词的词尾
    b: 跳至当前或前一个单词的词首
    
    #w: 
    
3、行内跳转:
    0: 绝对行首
    ^: 行首的第一个非空白字符
    $: 绝对行尾

4、行间跳转
    #G:跳转至第#行;
    G:最后一行
  gg:第一行第一个字符位置
    
    末行模式下,直接给出行号即可
  :# :跳转至第#行
  :$ :最后一行

 

5、翻屏

Ctrl+f: 向下翻一屏
Ctrl+b: 向上翻一屏

Ctrl+d: 向下翻半屏
Ctrl+u: 向上翻半屏

 

6、删除单个字符

x: 删除光标所在处的单个字符
X: 删除光标所在处前面的单个字
#x: 删除光标所在处及向后的共#个字符

 

7、删除命令: d

d命令跟跳转命令组合使用;
#dw, #de, #db, d0, d^, d$, dG, dgg, d#G

dd: 删除当前光标所在行
#dd: 删除包括当前光标所在行在内的#行;

 

末行模式下:
StartADD,EndADDd
.: 表示当前行
$: 最后一行
+#: 向下的#行

 

8、粘贴命令 p

p: 如果删除或复制为整行内容,则粘贴至光标所在行的下方,如果复制或删除的内容为非整行,则粘贴至光标所在字符的后面;
P: 如果删除或复制为整行内容,则粘贴至光标所在行的上方,如果复制或删除的内容为非整行,则粘贴至光标所在字符的前面;

 

9、复制命令 y

用法同d命令

 

10、修改:先删除内容,再转换为输入模式

    c: 用法同d命令
    C: = c$

 

11、替换:r

R: 替换模式

 

12、撤消编辑操作 u

u:撤消前一次的编辑操作
连续u命令可撤消此前的n次编辑操作
#u: 直接撤消最近#次编辑操作
撤消最近一次撤消操作:Ctrl+r

 

13、重复前一次编辑操作

.

 

14、可视化模式

v: 按字符选取
V:按矩形选取

 

15、查找

/PATTERN 从上往下
?PATTERN 从下往上
n 顺序查找
N 倒序查找

 

16、查找并替换

在末行模式下使用s命令
ADDR1,ADDR2s@PATTERN@string@gi (i 忽略大小写)
1,$ 第一行到最后一行
%:表示全文

 

17、使用vim编辑多个文件

vim FILE1 FILE2 FILE3
:next 切换至下一个文件
:prev 切换至前一个文件
:last 切换至最后一个文件
:first 切换至第一个文件
:qa 全部退出

 

18、分屏显示一个文件

Ctrl+w, s: 水平拆分窗口
Ctrl+w, v: 垂直拆分窗口

在窗口间切换光标:
Ctrl+w, 上下左右

:qa 关闭所有窗口

 

19、将当前文件中部分内容另存为另外一个文件

末行模式下使用w命令
:w
:ADDR1,ADDR2w /path/to/somewhere

 

20、将另外一个文件的内容填充在当前文件中

:r /path/to/somefile

 

21、跟shell交互

:! COMMAND

 

22、高级功能

1、显示或取消显示行号
:set number
:set nu

:set nonu

2、显示忽略或区分字符大小写
:set ignorecase
:set ic

:set noic

3、设定自动缩进
:set autoindent
:set ai
:set noai

4、查找到的文本高亮显示或取消
:set hlsearch
:set nohlsearch

5、语法高亮
:syntax on
:syntax off

 

23、配置文件

/etc/vimrc 重启vim即生效
~/.viminfo 

学习导师

vimtutor

 

 

 

posted @ 2018-02-24 15:53  小火星_Hirsi  阅读(432)  评论(0编辑  收藏  举报