昨天一个朋友忽然问我,在Linux下如何批量修改字符串,当时瞬间懵逼了,完全想不起来.......

  今天特意的重温了一下Linux下的一些常用命令,并将这个遗忘的批量修改字符串的命令记录下来(资料来自网络):

    在Linux下常用的批量修改字符串的方法有两种,在文件内批量修改和不打开文件直接进行修改

    1. 在文件内修改,即通过vi编辑器打开文件后进行批量替换:直接替换文件中的字符串。(此法不用打开文件即可替换字符串,而且可以批量替换多个文件。)

      • vi/vim 中可以使用 :s 命令来替换字符串。
        :s/chen/hong/         替换当前行第一个 chen 为 hong
        :s/chen/hong/g       替换当前行所有 chen 为 hong
        :n,$s/chen/hong/    替换第 n 行开始到最后一行中每一行的第一个 chen 为 hong
        :n,$s/chen/hong/g  替换第 n 行开始到最后一行中每一行所有 chen 为 hong  n 为数字,若 n 为 .,表示从当前行开始到最后一行
        :%s/chen/hong/     (等同于 :g/chen/s//hong/) 替换每一行的第一个 chen 为 hong
        :%s/chen/hong/g   (等同于 :g/chen/s//hong/g) 替换每一行中所有 chen 为 hong
        如果要替换的字符串内包含 / 的时候,可以使用 # 作为分隔符,此时中间出现的 / 不会作为分隔符。即:
                  :s#chen/#hong/# 替换当前行第一个 chen/ 为 hong/
                  :%s#/usr/etc#/etc#g 可以把文件中所有路径/usr/etc换成/etc
    1. 直接替换文件中的字符串。(此法不用打开文件即可替换字符串,而且可以批量替换多个文件。)

      • perl命令替换,参数含义如下:
        -a    自动分隔模式,用空格分隔$_并保存到@F中。相当于@F = split ”。分隔符可以使用-F参数指定
        -F    指定-a的分隔符,可以使用正则表达式
        -e    执行指定的脚本。
        -i<扩展名>   原地替换文件,并将旧文件用指定的扩展名备份。不指定扩展名则不备份。
        -l    对输入内容自动chomp,对输出内容自动添加换行
        -n    自动循环,相当于 while(<>) { 脚本; }
        -p    自动循环+自动输出,相当于 while(<>) { 脚本; print; }
        用法示例:
        perl -p -i.bak -e 's/\bfoo\b/bar/g' *.c
        将所有C程序中的foo替换成bar,旧文件备份成.bak

        perl -p -i -e "s/shan/hua/g" ./lishan.txt ./lishan.txt.bak 
        将当前文件夹下lishan.txt和lishan.txt.bak中的“shan”都替换为“hua”

        perl -i.bak -pe 's/(\d+)/ 1 + $1 /ge' file1 file2 
        将每个文件中出现的数值都加一

      • sed命令下批量替换文件内容   
        
        格式: sed -i "s/查找字段/替换字段/g" `grep 查找字段 -rl 路径` 文件名
        
        -i 表示inplace edit,就地修改文件
        
         -r 表示搜索子目录
        
         -l 表示输出匹配的文件名
        s表示替换,d表示删除 示例:sed -i "s/shan/hua/g" lishan.txt 把当前目录下lishan.txt里的shan都替换为hua
        sed的其他用法如下:
        
        、删除行首空格
        sed 's/^[ ]*//g' filename
        sed 's/^ *//g' filename
        sed 's/^[[:space:]]*//g' filename 、行后和行前添加新行
        行后:sed 's/pattern/&\n/g' filename
        行前:sed 's/pattern/\n&/g' filename
        &代表pattern 、使用变量替换(使用双引号)
        sed -e "s/$var1/$var2/g" filename 、在第一行前插入文本
        sed -i '1 i\插入字符串' filename 、在最后一行插入
        sed -i '$ a\插入字符串' filename 、在匹配行前插入
        sed -i '/pattern/ i "插入字符串"' filename 、在匹配行后插入
        sed -i '/pattern/ a "插入字符串"' filename 、删除文本中空行和空格组成的行以及#号注释的行
        grep -v ^# filename | sed /^[[:space:]]*$/d | sed /^$/d

在Linux中批量修改字符串的命令的更多相关文章

  1. (转)linux passwd批量修改用户密码

    linux passwd批量修改用户密码  原文:http://blog.csdn.net/xuwuhao/article/details/46618913 对系统定期修改密码是一个很重要的安全常识, ...

  2. linux passwd批量修改用户密码

    linux passwd批量修改用户密码 对系统定期修改密码是一个很重要的安全常识,通常,我们修改用户密码都使用 passwd user 这样的命令来修改密码,但是这样会进入交互模式,即使使用脚本也不 ...

  3. linux中常用的60个命令及作用详解

    Linux 必学的 60 个命令 Linux 提供了大量的命令,利用它可以有效地完成大量的工作,如磁盘操作.文件存取.目录操作.进程管理.文件权限设定等.所以,在 Linux 系统上工作离不开使用系统 ...

  4. Linux中系统检测工具top命令

    Linux中系统检测工具top命令 本文转自:https://www.cnblogs.com/zhoug2020/p/6336453.html 首先介绍top中一些字段的含义: VIRT:virtua ...

  5. Linux下批量修改文件及文件夹所有者及权限

    Linux下批量修改文件及文件夹所有者及权限需要使用到两个命令,chmod以及chown 例:对/opt/Oracle/目录下的所有文件与子目录执行相同的权限变更: chmod -R 700 /opt ...

  6. 在Linux中要修改一个文件夹或文件的权限

    在Linux中要修改一个文件夹或文件的权限我们需要用到linux chmod命令来做,下面我写了几个简单的实例大家可参考一下. 语法如下: chmod [who] [+ | - | =] [mode] ...

  7. 如何在Protel99se中批量修改元件的封装

    有时候需要批量修改元件的封装,可在原理图和PCB中批量修改.本文以批量修改电阻AXIAL0.3 的封装为AXIAL0.4 为例. 1. 在原理图中批量修改1.1. 方法1双击需要修改封装的其中一个元件 ...

  8. linux中没有dos2UNIX或者UNIX2dos命令怎么解决办法

    linux中没有dos2UNIX或者UNIX2dos命令怎么解决办法 http://blog.csdn.net/w616589292/article/details/38274475 dos2unix ...

  9. Linux课程---12、linux中内存指令(top命令的作用是什么)

    Linux课程---12.linux中内存指令(top命令的作用是什么) 一.总结 一句话总结: top实时观察进程.内存和CPU情况 1.电脑出现反应慢情况,最先想到的是什么? 内存 2.linux ...

随机推荐

  1. wordpress防止网站被镜像四个方法

    第一种:拆分域名链接与镜像站比对,然后用img标签src空值触发onerror来执行js比对,比对失败则跳转回源站.代码如下:(复制粘贴到主题的functions.php最后一个?>之前,代码出 ...

  2. 7.2 Models -- Defining Models

    一.概述 1. 模型是一个类,它定义了你呈现给用户的数据的属性和行为.用户希望如果他们离开你的应用程序,并返回后(或如果他们刷新页面)看到的任何东西应该被一个model代表. 2. 确保在ember. ...

  3. cocos代码研究(9)ProgressTimer类学习笔记

    理论部分 ProgressTimer是Node的子类. 该类根据百分比来渲染显示内部的Sprite对象. 变化方向包括径向,水平或者垂直方向. 代码部分 Type getType () const获取 ...

  4. MyBatis—mapper.xml映射配置

    SQL文件映射(mapper文件),几个顶级元素的配置: mapper元素:根节点只有一个属性namespace(命名空间)作用: 1:用于区分不同的mapper,全局唯一. 2:绑定DAO接口,即面 ...

  5. 22. Generate Parentheses(回溯)

    Given n pairs of parentheses, write a function to generate all combinations of well-formed parenthes ...

  6. uva1291

    这题说的给了 一 个 图,每次 按照他给的顺序 跳格子 给了 每种 格子之间的 转换 代价 求最后 转换代价 dp[i][j] 表示 左脚在i 右脚 在j 的最小代价 然后用滚动数组 ,就可以不断说的 ...

  7. HIVE: 自定义TextInputFormat (旧版MapReduceAPI ok, 新版MapReduceAPI实现有BUG?)

    我们的输入文件 hello0, 内容如下: xiaowang 28 shanghai@_@zhangsan 38 beijing@_@someone 100 unknown 逻辑上有3条记录, 它们以 ...

  8. superset可视化不同算法的点击率

    1. 首先我们通过superset的SQL Editor来编辑语句,语句没有写完整 2. 得到的结果为: 3. 然后点击Visualize,如图所示: 4. 因为要在图中显示不同算法的点击率,需要把d ...

  9. Qml应用程序的性能考虑与建议

    本文翻译自Qt官网文档: http://doc.qt.io/qt-5/qtquick-performance.html QtQml应用程序的性能考虑与建议 1.时间考虑 作为一名程序开发者,应该努力使 ...

  10. iview使用vue-i18n实现国际化

    iview官网中和网上的例子中使用的都是webpack方式,需要import js文件,但是由于项目架构比较简单,没有使用webpack,纯html和js进行交互.所以这里就直接使用js文件引用方式. ...