精华内容
下载资源
问答
  • sed 可以进行文本的字符串的编辑替换,删除操作

    Sed 是“stream editor”的缩写。
    例子:
    首先,编写一个Hello.sh,内容如下:

    #!/bin/bash
    echo "Hello,my name is Andy.Here is the name Andy again"
    

    如果想要将文本中的Andy换成Bill,可以利用sed命令如下:

    sed “s|Andy|Bill|g” Hello.sh
    

    lalall
    双引号“ ”的好处在于双引号里面可以包含一个变量。sed后面的s代表swap,
    第一个是文本中需要替换的内容Andy,第二个为替代后的内容Bill,g代表global.
    如果需要修改文本内容,则需要重定向">"输入到文本中。

     sed "s|Andy|Bill|g" Hello.sh > Hello_Bill.sh
    

    如果要编辑文件并覆盖它,而不是将输出重定向到新文件,则可以使用-i选项.

    sed -i  "s|Andy|Bill|g" Hello.sh
    

    于是我们可以结合for循环批量对文本进行修改,举个例子我们将文本中的名字name依次替换为 Andy John Bill

    for name in Andy John Bill; do
    sed -i "s|CHANGENAME|${name}|g" > ${name}_Names.sh
    done
    
    展开全文
  • 打开高效文本编辑之门_熟悉Linux Sed的替换命令

    多人点赞 热门讨论 2021-05-27 10:10:06
    Linux sed S命令常见使用案例 声明与简介 sed:Stream Editor文本流编辑,sed是一个“非交互式的”面向字符流的编辑...S命令即是删除行 (substitude)是对sed的输出流里的数据进行替换而不是直接作用到文件本身。 ...

                                Linux sed S替换命令常见使用案例

    声明与简介

    sed:Stream Editor文本流编辑,sed是一个“非交互式的”面向字符流的编辑器。本文主要以实际的数据来介绍sed的substitude(替换)即s命令的使用。

    替换是工作中经常用的应用场景,比如在拼接较多表的SQL命令时,即可通过sed的S命令进行字符的替换以达到拼接字符串的目的。S命令即是删除行 (substitude)是对sed的输出流里的数据进行替换而不是直接作用到文件本身。

    : 1 至少有一台linux环境,当前验证环境是Centos 8。

            2 了解常见的linux脚本的写法,能认识或者常用单词的缩写。

            3 本文会根据实际实践更新和修正,欢迎批评、指导。

            4 还不过瘾?传送门链接将至,欢迎点击查阅其它博文:    

                    1 sed模拟常见文件命令案例

                    2 sed 写命令常见案例

                    3 sed 删除行命令案例

                    4 sed 打印模式空间p命令案例

                    5 sed插入追加转换退出等命令案例

                    6 sed命令执行方式汇总案例

     

    一般形式为

    sed '[address-range|pattern-range] s/original-string/replacement-string/[substitute-flags]' inputfile

    • address-range 是文本的范围(行起始位置)
    • pattern-range 是匹配的范围(行起始位置)
    • s是固定关键字
    • original-string是文本的原始内容,即原有关键字(字符串)
    • replacement-string是要替换成的字符串
    • substitute-flags 是替换标识(选项)

     

    数据说明

    如下是使用的示例文本数据,这里的行号是为了方便解释结果,不是文本内容。

    1 7369,smith,clerk,7902,'1980-12-17',800,null,20
    2 7499,allen,salesman,7698,'1981-2-20',1600,300,30
    3 7521,ward,salesman,7698,'1981-2-22',1250,500,30
    4 7566,jones,manager,7839,'1981-4-2',2975,null,20
    5 7654,martin,salesman,7698,'1981-9-28',1250,1400,30
    6 7655,jack,manager,7698,'1987-3-28',1600,1800,10
    7 7656,tim,clerk,7902,'1982-12-12',1400,1400,30
    8 7657,kate,clerk,7902,'1989-11-11',1400,1800,10
    9 7698,blake,manager,7839,'1981-5-1',2850,null,30
    10 7699,dlake,salesman,7839,'1983-6-15',3000,null,10
    11 7782,clark,manager,7839,'1981-1-9',2450,null,10
    12 7788,scott,analyst,7566,'1982-12-9,3000,null,20
    13 7839,king,president,null,'1981-11-17',5000,null,10
    14 7844,turner,salesman,7698,'1981-12-8',1500,0,30
    15 7876,adams,clerk,7788,'1983-1-12',1100,null,20
    16 7900,james,clerk,7698,'1981-12-3',950,null,30
    17 
    18 --7902,ford,analyst,7566,'1981-12-3',3000,null,20
    19 
    20 7934,miller,clerk,7782,'1982-1-23',1300,null,10

    替换文本内容

    局部替换每行关键字(仅首次)

    # 1 用word2替换word1,该方式只会替换word1首次出现。
    sed 's/word1/word2/' filename
    
    # 示例 用null替换unkown
    sed 's/null/unknow/' emp.txt
    
    #以下内容仅摘录更改部分的数据,完整的数据未附录。

    忽略大小写关键字行替换

    # 2 用word2替换word1,该方式只会替换word1首次出现同时忽略大小写。
    sed 's/word1/word2/i' filename
    
    # 示例 用null替换unkown
    sed 's/null/unknow/i' emp.txt

    全局替换每行关键字

    # 3 用word2替换word1,g参数会在word1出现的所有位置替换。
    sed 's/word1/word2/g' filename
    
    # 示例 用mg替换manager
    sed 's/null/unkown/g' emp.txt
    
    # 对比示例1的结果不难发现,加了g选项后,该行里的所有的null都被替换成了unknow,而不是仅仅第一次出现的null。

    指定重复出现位次替换

    # 4 将每行里第m此出现的word1替换为word2。
    # 这里n的范围是1到512。
    # 如果word1的出现次数小于m,那么替换不生效。
    
    sed 's/word1/word2/m' filename
    # 示例 用将每行里第二次出现的null替换为unkonw.
    sed 's/null/unkown/2' emp.txt
    
    #替换部分的结果见下:
    7839,king,president,null,'1981-11-17',5000,unkown,10

    匹配关键字行替换

    # 5 对文件内出现word1关键字的行里的word2用word3替换。
    sed '/word1/s/word2/word3/' filename
    
    # 示例 将含有jack的行里的manager用mg替换
    sed '/jack/s/manager/mg/' emp.txt

    # 延展,同理如果word2出现多次,想要全部替换,想要加上g选项。即命令如:
    sed '/jack/s/manager/mg/g' emp.txt

    替换结合其它命令选项

    替换结合控制台打印

    # 1删除第n行,以m为步长(增幅)的所有行,输出为剩下内容。这里~是波浪线。
    sed 's/word1/word2/p' filename
    
    # 示例 用将每行里第二次出现的null替换为unkonw并将结果打印在控制台上。
    sed -n 's/null/unkown/2 p' emp.txt
    sed -n 's/null/unkown/2p' emp.txt
    # 结果见下:
    7839,king,president,null,'1981-11-17',5000,unkown,10

    替换结合写文件

    # 2 文件infilename将关键字word1替换为word2并写入文件outfilename内。
    sed '/word1/word2/w outfilename' infilename
    
    # 删除包含clerk和salesman的行,这里主要是借助|(管道符号)实现,即前面的输出作sed -n 's/null/unknow/2w outfile.txt' emp.txt
    
    # cat outfile.txt
    7839,king,president,null,'1981-11-17',5000,unknow,10

    替换结合执行选项

    # 3 替换结合e选项,即替换后的文本是linux可执行命令,加e之后可以直接执行输出结果。
    # 文件filename_tmp.txt里有一行,内容是“emp”。
    cat filename_tmp.txt
    # 内容为emp
    emp
    
    # 通过e选项,可以直接执行命令。
    sed 's/^/ls -a|grep /e' filename_tmp.txt
    # 结果为
    emp_bak.txt
    emp.txt

    多个选项合并使用

    # 将多个选项结合在一起使用。
    
    # 示例,将每行里第2次出现的null替换为unkown,忽略大小写,全局替换(即所有出现2次时),显示在控制台里、写入文件outfile.txt内。
    sed -n 's/null/unkonw/2gip w outfile.txt ' emp.txt
    
    # 结果
    7839,king,president,null,'1981-11-17',5000,unknow,10

     

    使用转义符

    #我们在字符串替换时用的符号是/,那么如果文本内容里也有/,那么显然是起冲突的。所以这是我们得用转移字符\。这和我们在其它语言里常见的处理方式类同。
    
    # 将文件内的/替换为\,这里因为S的替换内含”/”了,所以想要用到转移字符”\”
    cat filename_tmp.txt
    # 文件内容见下:
    /root/shenl/
    
    # 执行转换
    sed 's/\/root\/shenl\//\\root\\shenl\\/' filename_tmp.txt
    
    # 结果,如下。
    \root\shenl\

    替换时自定义分隔符

    #如果嫌转义字符转来转去麻烦,也可以自定义替换里的分隔符,而不是用默认的”\”。
    # 在替换命令s里自定义替换分隔符,这里用的@,也可以用|、!、^等特殊符号。前提是文本内不会出现该分隔符。
    # 注意,这里指定的分隔符不支持多个字符,比如@|作为一个分隔符是不支持的。
    
    
    # 将文件内的/替换为\
    #cat filename_tmp.txt
    
    # 文件内容
    /root/shenl/
    
    
    # 这里因为\是转义字符,所以想要加2个给转回来。
    sed 's@/root/shenl/@\\root\\shenl\\@' filename_tmp.txt
    # 结果
    \rootshenl\

    批量替换

    # 多个替换命令批量执行,执行时会按照顺序执行,而不是并行执行。
    
    # 将sales替换为sale后再将man替换为woman。
    sed '{
    s/sales/sale/
    s/man/woman/
    }' emp.txt

    整文本打包替换

    # 如果想将几个匹配的模式打包成一个整体替换,可以用&
    #以数字正则匹配,将4个数字的作为一个整体“word”,在这个“word”前后加上双引号“。
    sed 's/^[0-9][0-9][0-9][0-9]/"&"/g' emp.txt
    
    # 执行结果部分示例数据见下:
    "7369",smith,clerk,7902,'1980-12-17',800,null,20
    "7499",allen,salesman,7698,'1981-2-20',1600,300,30
    "7521",ward,salesman,7698,'1981-2-22',1250,500,30
    
    #如果想头和尾匹配则想要用到正则符号,^(头)、$(尾)。
    # 示例,在每行的开头和结尾分别加上{和}。
    sed 's/^.*$/{&}/g' emp.txt
    # 结果示例
    {7369,smith,clerk,7902,'1980-12-17',800,null,20}

    单组方式匹配替换

    #该方式对行按某个模式匹配,这里的模式可以认为是一种以字符串的分割或者前后有字符串的分割模式。比如以单字符;、|、:分割,或者已()、[]、{}前后分割。
    
    # 这里的单组的意思是只提取出一组。:
    
    cat file_tmp.txt
    # 结果
    /usr/apps/bin:/usr/local/bin:/root/:/root/software
    /usr/local/sbin:/usr/apps/sbin:/opt/bin
    
    # 提取出第一组
    # 1 这里是\([^:]*\) 是匹配所有字符(内容)直到”:”。
    
    # 2 \1指的是提取第1组。
    sed 's/\(\/[^:]*\).*/\1/g' file_tmp.txt
    # 结果
    /usr/apps/bin
    /usr/local/sbin
    
    # 提取出第二组
    # 参数类似上例,这里有个匹配模式后的符号“:”要指定正确。
    
    sed 's/\([^:]*\):\([^:]*\):\(.*\).*/\2/g' file_tmp.txt
    #结果
    /usr/local/bin
    /usr/apps/sbin

    多组方式匹配替换

    # 多组的和单组的类似,主要是输出时同对几个组同时操作(同组重复也可以)。
    cat file_tmp.txt
    #结果
    /usr/apps/bin:/usr/local/bin:/root/
    /usr/local/sbin:/usr/apps/sbin:/opt/bin
    
    # 不难发现此时group1和group3调换了位置,且组间以逗号作为分隔符。
    sed 's/\([^:]*\):\([^:]*\):\(.*\).*/\3,\2,\1/g' file_tmp.txt
    #结果
    /root/,/usr/local/bin,/usr/apps/bin
    /opt/bin,/usr/apps/sbin,/usr/local/sbin
    
    cat employee.txt
    # 结果
    101,John Doe,CEO
    102,Jason Smith,IT Manager
    103,Raj Reddy,Sysadmin
    104,Anand Ram,Developer
    105,Jane Miller,Sales Manager
    
    #对不同列进行操作并重新排序
    sed 's/\([^,]*\),\([^,]*\),\(.*\).*/\3,\2,\1/g' employee.txt
    
    #结果
    CEO,John Doe,101
    IT Manager,Jason Smith,102
    Sysadmin,Raj Reddy,103
    Developer,Anand Ram,104
    Sales Manager,Jane Miller,105

     

    替换结合正则表达式

    行结尾替换

    # 替换每行结尾前2个字符为” new Append”(不含换行)。
    sed 's/..$/,new Append/' emp.txt
    
    #结果
    7369,smith,clerk,7902,'1980-12-17',800,null,new Append
    7499,allen,salesman,7698,'1981-2-20',1600,300,new Append
    7521,ward,salesman,7698,'1981-2-22',1250,500,new Append
    
    #原始数据
    7369,smith,clerk,7902,'1980-12-17',800,null,20
    7499,allen,salesman,7698,'1981-2-20',1600,300,30
    7521,ward,salesman,7698,'1981-2-22',1250,500,30

    截断关键字之后的内容

    #将salesman后的内容替换为空,即“删除”。这里它前面的一个字符也替换为空
    # sed 's/.salesman.*//' emp.txt
    # 结果
    7369,smith,clerk,7902,'1980-12-17',800,null,20
    7499,allen
    7521,ward
    
    # 原始文件(部分)
    7369,smith,clerk,7902,'1980-12-17',800,null,20
    7499,allen,salesman,7698,'1981-2-20',1600,300,30
    7521,ward,salesman,7698,'1981-2-22',1250,500,30

     

    删除以某个关键字开头的行

    #删除以”--”开头的行,--.*即匹配以—开头的所有行。
    # 这里又用到多命令执行以”;”拼接,其中^$指的是空行。
    sed -e 's/--.*//; /^$/ d' emp.txt

    删除以某个关键字结尾的行

    #删除以”--”结尾的行,.*--$即匹配以—结尾的所有行。
    # 这里又用到多命令执行以”;”拼接,其中^$指的是空行。
    sed -e 's/.*--$//; /^$/ d' emp.txt

    Dos文件格式转Unix文件格式

    #众所周知,Windows(DOS)的行分隔符是回车(CR)换行(LF),而Unix(Linux)的则是(换行)LF。所以如果想转换即将每行的倒数第一个(不含LF)的CR替换为空即可。
    sed 's/.$//' emp.txt

    GNU版文本替换延展

    局部小写关键字行替换

    # 1 将scoot关键字替换为SCoTt,这里o和t前分别加了\l标识,可认为做了转义,即不做大写处理。
    sed -n 's/scott/SC\lOT\lT/p' emp.txt
    
    #以下内容仅摘录更改部分的数据,完整的数据未附录。
    7788,SCoTt,analyst,7566,'1982-12-9,3000,null,20,scott
    
    # 原始文本内容
    7788,scott,analyst,7566,'1982-12-9,3000,null,20,scott

     

    全局小写关键字行替换

    # 2 将scoot关键字替换为Scott,这里尽管替换时写的是”OTT”但是前面加了\L标识,所以全部都变成了小写的ott。
    sed -n 's/scott/SC\LOTT/p' emp.txt
    
    # 执行结果,ott全是小写,尽管替换是是“OTT”
    7788,SCott,analyst,7566,'1982-12-9,3000,null,20,scott
    
    
    注:1 \L和\l(即大写L和小写l的区别在于l只能控制后面的1个字符为小写,而L则是后面所有的字符都是小写)。
        2 不论\l还是\L都只是对匹配到的第一个关键字起作用,第二和之后的不起作用。
        3 针对问题2,想对所有匹配的关键字起作用,想要加g选项(标识)。

    局部控制大写关键字行替换

    # 3 将scoot关键字替换为SCoTt,这里o和t前分别加了\l标识,可认为做了转义,即不做大写处理。
    sed -n 's/scott/sc\uot\ut/p' emp.txt
    
    #以下内容仅摘录更改部分的数据,完整的数据未附录。
    7788,scOtT,analyst,7566,'1982-12-9,3000,null,20,scott
    
    # 原始文本内容
    7788,scott,analyst,7566,'1982-12-9,3000,null,20,scott

    全局大写关键字行替换

    # 4 将scoot关键字替换为Scott,这里尽管替换时写的是”OTT”但是前面加了\L标识,所以全部都变成了小写的ott。
    
    sed -n 's/scott/sc\Uott/p' emp.txt
    # 执行结果,OTT全是大写,尽管替换是小写“ott”
    7788,scOTT,analyst,7566,'1982-12-9,3000,null,20,scott
    
    注:1 特点和上节类似,这里\l、\u和
    \U、\L可以一同记忆,即尽管在sed里输入的是大小写,但经过这些转换标识后会做相应的小大写转换。
        2 这里l即low,u即是UPPER。

    局部保留关键字行替换

    # 5 使用\U或者\L时如果想后面有些部分保留小写或者大写时可用\E标识。
    # 示例 将scott替换为scOTT king
    sed -n 's/scott/sc\Uott \Eking/p' emp.txt
    
    
    如果不加\E,则结果会全部替换为
    #sed -n 's/scott/sc\Uott king/p' emp.txt
    7788,scOTT KING,analyst,7566,'1982-12-9,3000,null,20,scott

     

    展开全文
  • Linux中tail,find,grep,sed,awk等,各个查找替换,常用命令,可以很好 的了解tail,find,grep,sed,awk等各个命令的各个参数的含义和用法,掌握Linux下查找替换的功能
  • linux 编辑文件命令

    千次阅读 2021-02-04 15:02:50
    刚接触Linux,前几天申请了个免费体验的阿里云服务器,选择的是Ubuntu系统,配置jdk环境变量的时候需要编辑文件。 vi命令编辑文件,百度了一下,很多回答不是很全面,因此编辑文件话了一些时间。 这里博主整理了一下...

    刚接触Linux,前几天申请了个免费体验的阿里云服务器,选择的是Ubuntu系统,配置jdk环境变量的时候需要编辑文件。

    vi命令编辑文件,百度了一下,很多回答不是很全面,因此编辑文件话了一些时间。

    这里博主整理了一下,分享给大家。

    一、vi编辑器有3种基本工作模式 首先需要知道vi编辑器有3种基本工作模式,分别是:命令模式、文本输入模式、和末行模式。

    第一:命令行模式:该模式是进入vi编辑器后的默认模式。任何时候,不管用户处于何种模式,按下ESC键即可进入命令模式。在该模式下,用户可以输入vi命令,用户管理自己的文档。此时从键盘上输入的任何字符都被当作编辑命令来解释。若输入的字符是合法的vi命令,则vi在接受用户命令之后完成相应的动作。但需要注意的是,所输入的命令并不回显在屏幕上。若输入的字符不是vi命令,vi会响铃报警。

    第二:文本输入模式:在命令模式下输入命令i、附加命令a、打开命令o、修改命令c、取代命令r或替换命令s都可以进入文本输入模式。在该模式下,用户输入的任何字符都被vi当作文件内容保护起来,并将其显示在屏幕上。在文本输入过程中,若想回到命令模式下,按ESC键即可。

    第三:末行模式:末行模式也称ex转义模式。在命令模式下,用户按“:”键即可进入末行模式下,此时vi会在显示窗口的最后一行(通常也是屏幕的最后一行)显示一个“:”作为末行模式的说明符,等待用户输入命令。多数文件管理命令都是在此模式下执行的(如把编辑缓冲区的内容写到文件中等)。末行命令在执行完后,vi自动回到命令模式。如果要从命令模式转换到编辑模式,可以键入a或者i。如果需要从文本模式返回,则按ESC即可。在命令模式下输入“:”即可切换到末行模式,然后输入命令。

    综上,一般我们使用命令打开文件的时候,是进入到命令模式。在命令模式下,可以切换到文本输入模式和末行模式,但是文本输入模式和末行模式之间是不可以直接相互切换了,因此文本输入模式切换到末行模式,需要先回到命令模式再切换,反之亦然。

    此外,编辑文本可以在文本输入模式下,键盘输入对文编进行编辑,或者在命令模式下使用vi命令也是可以起到编辑效果的。

    实例演示 首先我们使用命令 vi filename 打开一个文件,这个时候进入到的是命令模式 接下来我们按i,然后键盘随便输入写内容。 然后按ESC重新进入到命令模式。 在命令模式的情况下,我们按:,进入到了末行模式。 我们输入wq!,然后回车,强行保存退出。 下次我们再打开对应文件(可用less filename命令打开),即可看到内容已经更改。

    补充: (1)末行模式下:q! 【强制退出不保存】 q【退出不保存】 wq【退出并保存后面也可以加个!】 (2)如果你不想保存直接退出有可以在命令模式下使用“ctrl+z”快捷键或者按住“shift”键,输入两个z即可退出。

    更多命令 进入vi的命令 vi filename :打开或新建文件,并将光标置于第一行首 vi +n filename :打开文件,并将光标置于第n行首 vi + filename :打开文件,并将光标置于最后一行首 vi +/pattern filename:打开文件,并将光标置于第一个与pattern匹配的串处 vi -r filename :在上次正用vi编辑时发生系统崩溃,恢复filename vi filename….filename :打开多个文件,依次进行编辑

    屏幕翻滚类命令 Ctrl+u:向文件首翻半屏 Ctrl+d:向文件尾翻半屏 Ctrl+f:向文件尾翻一屏 Ctrl+b;向文件首翻一屏 nz:将第n行滚至屏幕顶部,不指定n时将当前行滚至屏幕顶部。

    插入文本类命令 i :在光标前 I :在当前行首 a:光标后 A:在当前行尾 o:在当前行之下新开一行 O:在当前行之上新开一行 r:替换当前字符 R:替换当前字符及其后的字符,直至按ESC键 s:从当前光标位置处开始,以输入的文本替代指定数目的字符 S:删除指定数目的行,并以所输入文本代替之 ncw或nCW:修改指定数目的字 nCC:修改指定数目的行

    删除命令 ndw或ndW:删除光标处开始及其后的n-1个字 do:删至行首 d$:删至行尾 ndd:删除当前行及其后n-1行 x或X:删除一个字符,x删除光标后的,而X删除光标前的 Ctrl+u:删除输入方式下所输入的文本

    搜索及替换命令 /pattern:从光标开始处向文件尾搜索pattern ?pattern:从光标开始处向文件首搜索pattern n:在同一方向重复上一次搜索命令 N:在反方向上重复上一次搜索命令 :s/p1/p2/g:将当前行中所有p1均用p2替代 :n1,n2s/p1/p2/g:将第n1至n2行中所有p1均用p2替代 :g/p1/s//p2/g:将文件中所有p1均用p2替换

    选项设置 all:列出所有选项设置情况 term:设置终端类型 ignorance:在搜索中忽略大小写 list:显示制表位(Ctrl+I)和行尾标志($) number:显示行号 report:显示由面向行的命令修改过的数目 terse:显示简短的警告信息 warn:在转到别的文件时若没保存当前文件则显示NO write信息 nomagic:允许在搜索模式中,使用前面不带“\”的特殊字符 nowrapscan:禁止vi在搜索到达文件两端时,又从另一端开始 mesg:允许vi显示其他用户用write写到自己终端上的信息

    末行模式命令 :n1,n2 co n3:将n1行到n2行之间的内容拷贝到第n3行下 :n1,n2 m n3:将n1行到n2行之间的内容移至到第n3行下 :n1,n2 d :将n1行到n2行之间的内容删除 :w :保存当前文件 :e filename:打开文件filename进行编辑 :x:保存当前文件并退出 :q:退出vi :q!:不保存文件并退出vi :!command:执行shell命令command :n1,n2 w!command:将文件中n1行至n2行的内容作为command的输入并执行之,若不指定n1,n2,则表示将整个文件内容作为command的输入 :r!command:将命令command的输出结果放到当前行

    寄存器操作 “?nyy:将当前行及其下n行的内容保存到寄存器?中,其中?为一个字母,n为一个数字 “?nyw:将当前行及其下n个字保存到寄存器?中,其中?为一个字母,n为一个数字 “?nyl:将当前行及其下n个字符保存到寄存器?中,其中?为一个字母,n为一个数字 “?p:取出寄存器?中的内容并将其放到光标位置处。这里?可以是一个字母,也可以是一个数字 ndd:将当前行及其下共n行文本删除,并将所删内容放到1号删除寄存器中。 以上就是良许教程网为各位朋友分享的Linux相关知识。

    展开全文
  • Linux编辑文件常用命令

    千次阅读 2013-10-30 11:03:56
    Linux文件编辑器 Vi(Vim) 关键字: vim  1、关于文本编辑器; 文本编辑器有很多,比如图形模式的gedit、kwrite、OpenOffice ... ... ,文本模式下的编辑器有vi、vim(vi的增强版本)和nano ... ... vi...
    Linux文件编辑器 Vi(Vim)
    关键字: vim 
    1、关于文本编辑器;




    文本编辑器有很多,比如图形模式的gedit、kwrite、OpenOffice ... ... ,文本模式下的编辑器有vi、vim(vi的增强版本)和nano ... ... vi和vim是我们在Linux中最常用的编辑器。我们有必要介绍一下vi(vim)最简单的用法,以让Linux入门级用户在最短的时间内学会使用它。


    nano 工具和DOS操作系统下的edit操作相似,使用简单,我们不作介绍了,如果您有兴趣,不妨尝试一下;




    2、vi 编辑器;




    为什么要学会简单应用vi


    vi 或vim是Linux最基本的文本编辑工具,vi或vim虽然没有图形界面编辑器那样点鼠标的简单操作,但vi编辑器在系统管理、服务器管理中,永远不是图形界面的编辑器能比的。当您没有安装X-windows桌面环境或桌面环境崩溃时,我们仍需要字符模式下的编辑器vi;


    vi或vim 编辑器在创建和编辑简单文档最高效的工具;




    3、vi 编辑器的使用方法;






    3.1 如何调用vi ;






    [root@localhost ~]# vi filename




    ~
    ~
    ~
    ~
    ~
    ~
    ~
    ~




    3.2 vi 的三种命令模式;






    Command(命令)模式,用于输入命令;
    Insert(插入)模式,用于插入文本;
    Visual(可视)模式,用于视化的的高亮并选定正文;




    3.3 文件的保存和退出;




    Command 模式是vi或vim的默认模式,如果我们处于其它命令模式时,要通过ESC键切换过来。


    当我们按ESC键后,接着再输入:号时,vi会在屏幕的最下方等待我们输入命令;




    :w 保存;
    :w filename 另存为filename;
    :wq! 保存退出;
    :wq! filename 注:以filename为文件名保存后退出;
    :q! 不保存退出;
    :x 应该是保存并退出 ,功能和:wq!相同




    3.4 光标移动;




    当我们按ESC进入Command模式后,我们可以用下面的一些键位来移动光标;




    j 向下移动一行;
    k 向上移动一行;
    h 向左移动一个字符;
    l 向右移动一个字符;
    ctrl+b 向上移动一屏;
    ctrl+f 向下移动一屏;
    向上箭头 向上移动;
    向下箭头 向下移动;
    向左箭头 向左移动;
    向右箭头 向右移动;


    我们编辑一个文件时,对于 j、k、l和h键,还能在这些动作命令的前面加上数字,比如 3j,表示向下移动3行。




    3.5 插入模式(文本的插入);






    i 在光标之前插入;
    a 在光标之后插入;
    I 在光标所在行的行首插入;
    A 在光标所在行的行末插入;
    o 在光标所在的行的上面插入一行;
    O 在光标所在的行的下面插入一行;
    s 删除光标后的一个字符,然后进入插入模式;
    S 删除光标所在的行,然后进入插入模式;




    3.6 文本内容的删除操作;






    x 一个字符;
    #x 删除几个字符,#表示数字,比如3x;
    dw 删除一个单词;
    #dw 删除几个单词,#用数字表示,比如3dw表示删除三个单词;
    dd 删除一行;
    #dd 删除多个行,#代表数字,比如3dd 表示删除光标行及光标的下两行;
    d$ 删除光标到行尾的内容;
    J 清除光标所处的行与上一行之间的空格,把光标行和上一行接在一起;




    3.7 恢复修改及恢复删除操作;






    u 撤消修改或删除操作;


    按ESC键返回Command(命令)模式,然后按u键来撤消删除以前的删除或修改;如果您想撤消多个以前的修改或删除操作,请按多按几次u。这和Word的撤消操作没有太大的区别;




    3.8 可视模式;




    在最新的Linux发行版本中,vi提供了可视模式,因为这个功能是vim才有的。如果您用的vi没有这个功能,就换成vim就有了。打开可视模式,按ESC键,然后按v就进入可视模式;


    可视模式为我们提供了极为友好的选取文本范围,以高亮显示;在屏幕的最下方显示有;




    -- 可视 -- 

    --VISUAL--




    进入可视模式,我们就可以用前面所说的命令行模式中的光标移动指令,可以进行文本范围的选取。


    选取文本范围有何用?


    我们可以对某部份删除作业,按d键就删除了我们选中的内容。
    选中内容后,我们按y就表示复制;按d表示删除;


    值得一提是的删除的同时,也表示复制。我们返回到命令模式,然后移动光标到某个位置,然后按shift+p键,就把刚才删除的内容贴上了。我们先在这里提一句,在后文,我们还得详细说说。


    退出可视模式,还是用ESC键;




    3.9 复制和粘帖的操作;




    其实删除也带有剪切的意思,当我们删除文字时,可以把光标移动到某处,然后按shift+p键就把内容贴在原处,然后再移动光标到某处,然后再按p或shift+p又能贴上;




    p 在光标之后粘帖;
    shift+p 在光标之前粘帖


    来举一例:


    比如我们想把一个文档的第三行复制下来,然后帖到第五行的后面,我们应该怎么做呢?


    有两种方法;


    第一种方法:


    先把第三行删除,把光标移动到第三行处,然后用dd动作,接着再按一下shift+p键。这样就把刚才删除的第三行帖在原处了。


    接着我们再用k键移动光标到第五行,然后再按一下p键,这样就把第三行的内容又帖到第五行的后面了;


    第二种方法;


    进入可视模式,按ESC键,然后按v键。移动鼠标指针,选中第三行的内容,然后按y键复制;再移动指针到第五行,最后按p键;


    所以复制和粘贴操作,是命令模式、插入模式及可视模式的综合运用;我们要学会各种模式之间的切换,要常用ESC键;更为重要的学会在命令模式下移动光标;




    3.10 关于行号;




    有时我们配置一个程序运行时,会出现配置文件X行出现错误 。这时我们要用到行号相关的操作;




    为所有内容添加行号;




    按ESC键,然后输入:




    :set number


    光标所处位置


    在屏幕的右下角,有类似如下的;




          57,8 27%


    在这之中,57表示第57行,8表示第8个字符;




    3.11 查找和替换功能;






    3.11.1 查找;




    首先,我们要进入ESC键,进入命令模式;我们输入/或?就进入查找模式了;




    /SEARCH 注:正向查找,按n键把光标移动到下一个符合条件的地方;
    ?SEARCH 注:反向查找,按shift+n 键,把光标移动到下一个符合条件的


    举一例:比如我想在一个文件中找到swap单词,我应该如下做;


    首先按ESC键,进入命令模式,然后输入;




    /swap

    ?swap




    3.11.2 替换;




    按ESC键进入命令模式;




    :s /SEARCH/REPLACE/g 注:把当前光标所处的行中的SEARCH单词,替换成REPLACE,并把所有SEARCH高亮显示;
    :%s /SEARCH/REPLACE 注:把文档中所有SEARCH替换成REPLACE;
    :#,# s /SEARCH/REPLACE/g 注:#号表示数字,表示从多少行到多少行,把SEARCH替换成REPLACE;


    注:在这之中,g表示全局查找;我们注意到,就是没有替换的地方,也会把SEARCH高亮显示;


    举例说明:


    比如我们有一篇文档要修改;


    我们把光标所在的行,把所有单词the,替换成THE,应该是:




    :s /the/THE/g


    我们把整篇文档的所有的the都替换成THE,应该是: 




    :%s /the/THE


    我们仅仅是把第1行到第10行中的the,替换成THE,应该是;




    :1,10 s /the/THE/g




    4、关于本文;




    我写本文的目的是让新手在最短的时间内用vi或vim创建、编辑和修改文件,所以说这篇文档并不是大而全的vi手册。如果把vi所有的功能都说全了,至少得写一本千页的手册;本也没有涉及更为高级的vi用法。如果想了解的更多,请查找man和help;




    5、后记;




    到目前为止,关于目录和文件的操作,我写过有几篇了,从文件和目录的创建、删除、复制到属性操作,最后到文件修改等系列文档。这些文档都是有相关性的,如果把这些相关性的文档连起来,就是一个整体知识块。我们只有掌握了这些知识,才能实现文件系统的管理。


    在以后我会写什么内容呢????可能会补充一下文件的查找,其实以前有类似文档,到时我总结一下,贴出来给大家看看就行了。


    下一步是准备网络基础文档建设中,网络基础比较重要,这是我计划的下一个重点。。。。。。。。




    6、参考文档;




    man vi 和vi --help
     
    展开全文
  • Linux文本文件编辑命令

    千次阅读 2018-08-16 16:37:23
    Linux文本文件编辑命令 1.cat命令 cat命令用于查看纯文本件(内容较少的),格式为“ cat [选项 ] [文件 ]”。 2.more命令 more命令用于查看纯文本件(内容较多的),格式为“ more [选项 ]文件”。 3.head命令...
  • Linux 文本文件编辑命令 1.cat 查看纯文本文件,内容较少的,cat[选项][文件],显示行号的 -n 2.more查看纯文本文件,内容较多的,more[选项]文件 3.head 查看纯文本文档的前N行,head -n 20 文件 ...
  • Linux文档编辑命令大全

    千次阅读 2018-07-06 16:10:29
    1.col命令Linux col命令用于过滤控制字符。在许多UNIX说明文件里,都有RLF控制字符。当我们运用shell特殊字符">"和">>",把说明文件的内容输出成纯文本文件时,控制字符会...
  • linux文本替换命令

    千次阅读 2018-06-29 16:24:06
    cat 1.txt | sed -r "s/172.18./route add 172.18./g" > 2.txts/后跟“被替换的内容”、“替换成的内容”1.txt为需要替换的文本2.txt为保存成的文本
  • linux文本文件编辑命令

    千次阅读 2018-12-25 20:04:45
    Linux系统中有多个用于查看文本内容的命令,每个命令都有自己的特点,比如这个cat命令就是用于查看内容较少的纯文本文件的。 如果在查看文本内容时还想顺便显示行号的话,不妨在cat命令后面追加一个-n参数: 2....
  • Linux学习之文本查找编辑替换命令

    千次阅读 2019-01-06 22:34:37
    本文主要包括Linux环境下最常使用的文本查找编辑替换命令,包括: find grep awk sed find Linux系统下用于文本查找定位的命令行。 命令语法: find [-H] [-L] [-P] [-Olevel] [-D help|tree|...
  • Linux文件编辑命令详细整理

    万次阅读 多人点赞 2016-02-25 09:56:21
    刚接触Linux,前几天申请了个免费体验的阿里云服务器,选择的是Ubuntu系统,配置jdk环境变量的时候需要编辑文件。vi命令编辑文件,百度了一下,很多回答不是很全面,因此编辑文件话了一些时间。这里博主整理了一下,...
  • 5分钟学会Linux编辑文件命令

    万次阅读 多人点赞 2018-09-19 14:06:08
    Linux编辑文件命令    一、引言  相信有很多程序员朋友,在长时间不操作linux系统或者初学linux命令时,都有跟我有一样的疑惑。  这个vim命令与vi命令有什么区别?不都是编辑器么?  接下来呢,我就通过...
  • 在我们平时需求上线,环境部署时,都会遇到在linux系统下操作文件的情况.目前网上各类资料琳琅满目,发现下面这边文章很不错,现在分享如下; 一、vi编辑器的3种基本工作模式 首先需要知道vi编辑器有3种基本工作...
  • 1、通过vim编辑器来替换 vi/vim 中可以使用 :s 命令替换字符串。 :s/well/good/ 替换当前行第一个 well 为 good :s/well/good/g 替换当前行所有 well 为 good :n,$s/well/good/ 替换第 n 行开始到最后一行中每...
  • Linux常用命令
  • Linux文件编辑命令vi详细说明

    千次阅读 2019-07-05 13:52:44
    目录 1、引言 2、vi命令与vim命令 3、vi命令使用 ...相信有很多程序员朋友,在长时间不操作linux系统或者初学linux命令时,都有跟我有一样的疑惑。 这个vim命令与vi命令有什么区别?不都是编辑...
  • 本文是要讲linux 不打开文档/文件的情况下,替换文本内容。 打开文档,在文档/文件内替换内容的,可以用vim,可参考这篇文章vim 替换文本 。...s (substitute)为查找替换命令 # 在输出或打印中,替换字符串。并...
  •  Vim 是一个功能强大的全屏幕文本编辑器,是 Linux/UNIX 上最常用的文本编辑器,它的作用是建立、编辑、显示文本文件。  Vim 没有菜单,只有命令 2、Vim 工作模式 3、插入命令 4、定位命令 5、删除命令...
  • Linux常用命令

    万次阅读 多人点赞 2018-11-08 11:49:23
    目录 一、基本命令 1.1 关机和重启 1.2 帮助命令 二、目录操作命令 2.1 目录切换 cd 2.2 目录查看 ls [-al] 2.3 目录操作【增,删,...2.3.2删除目录或文件【删】rm ...三、文件操作命令 3.1 文件操作【增,...
  • linux中使用vim命令轻松编辑文件

    千次阅读 2019-04-03 15:45:36
    文件内容进行编辑 退出模式 退出vim程序 命令模式 1) 调整vim的工作方式 在vim程序中 :set 调整参数 示例: :set nu ##在每一行前显示行号 :set nonu ##取消行号显示 :set mouse=a ##显示鼠标 :set ...
  • Linux下vi替换字符命令操作实例

    千次阅读 2014-06-05 18:44:12
     本文以一个实际的文件为例,详细介绍了Linux下常用的vi替换字符命令,为相关的开发工作提供给了参考。 本文中被操作的文件为TestFile.txt,其中的内容如下: zhou@linux:~/zhouzx/Test> cat TestFile.txt 
  • Linux 文档编辑 : ex 命令详解

    千次阅读 2018-07-10 10:11:34
    语法ex [选项][参数]参数说明:+数字:从文件指定的数字行开始显示-b:使用二进制模式编辑文件-c 指令:编辑完第一个文件后执行指定的指令-d :编辑多个文件时,显示差异部分-m :不允许修改文件...
  • 1. vimvim 编辑文件时经常会出现向改动文件中某个变量名的情况,但是该变量名分布在文件各个地方,手动去改非常麻烦,可以使用 vim 的字符串替换命令。示例:%s/old/new/g 上述命令可以将整个文件中的字符 old 替换为...
  • Linux 文档编辑 : ed 命令详解

    千次阅读 2018-07-09 11:44:31
    ed命令是单行纯文本编辑器,它有命令模式(commandmode)和输入模式(input mode)两种工作模式。ed命令支持多个内置命令,常见内置命令如下:A:切换到输入模式,在文件的最后一行之后输入新的内容; C:切换到输入...
  • Linux系统攻略 关于vi替换命令的使用说明
  • sed 命令表示 Stream Editor(流编辑器),用来在 Linux 上执行基本的文本操作。它可以执行各种功能,如搜索、查找、修改、插入或删除文件。 此外,它也可以执行复杂的正则表达式匹配。 它可用于以下目的: 查找和...
  • Linux 系统中有多个用于查看文本内容的命令,每个命令都有自己的特点,比如这个 cat命令就是用于查看内容较少的纯文本文件的。 2.more 命令 more 命令用于查看纯文本文件(内容较多的),格式为“more [选项]文件”...
  • Linux Vi文本编辑中的常用命令之批量替换 由 xiaolin | 发表 2014 年 5 月 19 日暂无评论 vi这个命令linux里面经常会用到,今天我们就来学习一下怎么在vi里面实现字符串的批量替换。 a. 文件内全部替换...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 106,779
精华内容 42,711
关键字:

linux编辑文件替换命令

linux 订阅