文章目录

  • 0.sed -i与sed
  • 1.修改文件内容
  • 2.在文件中插入行
  • 3.在文件中删除行
  • 4.使用find查找文件,并用 | xargs传输文件名给sed命令

0.sed -i与sed

sed -i 就是直接对文本文件进行操作的,如果单纯是sed那么就只是把处理结果输出到命令行,实际上文件内容没有变化。

动作说明: [n1[,n2]]function
n1, n2 :不见得会存在,一般代表『选择进行动作的行数』,举例来说,如果我的动作是需要在 10 到 20 行之间进行的,则『 10,20[动作行为] 』-i :直接修改读取的文件内容,而不是输出到终端。
-s :取代,可以直接进行取代的工作哩!通常这个 s 的动作可以搭配正规表示法!例如 1,20s/old/new/g 就是啦!

1.修改文件内容

参考:Ubuntu设置CMake编译时使用的OpenCV版本

比如CMakeLists.txt文件内容如下:

cmake_minimum_required(VERSION 3.1)
project(test)find_package(OpenCV REQUIRED)
file(GLOB_RECURSE sources src/*.cpp)
add_exectuable(${PROJECT_NAME} SHARED ${sources})
target_link_libraries(${PROJECT_NAME}${OpenCV_LIBS}
)

使用如下命令替换OpenCV REQUIREDOpenCV 3 REQUIRED

sed -i "s/OpenCV REQUIRED/OpenCV 3 REQUIRED/g" CMakeLists.txt

2.在文件中插入行

参考:【Linux】在文件的指定位置插入数据

在1中替换后,CMakeLists.txt文件内容如下,cat -n参数代表输出显示行号。

# cc @ home-pc in ~/Desktop [0:18:24]
$ cat -n CMakeLists.txt1    cmake_minimum_required(VERSION 3.1)2    project(test)3  4   find_package(OpenCV 3 REQUIRED)5    file(GLOB_RECURSE sources src/*.cpp)6   add_exectuable(${PROJECT_NAME} SHARED ${sources})7  target_link_libraries(8     ${PROJECT_NAME}9        ${OpenCV_LIBS}10    )

通过sed -i "行数+i+空格+想要插入的语句" 想要插入的文件名 来插入,注意插入的行数是指从哪行插入。比如想从第5行插入message(STATUS "OpenCV_DIR = "${OpenCV_DIR}")这句话,如下所示。

注意

  1. 内部"要用转义字符\进行转义。
  2. 内部$也要用转义字符\进行转义,因为现在是命令行输入,会自动把$字符认为是查找环境变量。
# cc @ home-pc in ~/Desktop [0:19:25] C:130
$ sed -i "5i message(STATUS \"OpenCV_DIR = \${OpenCV_DIR}\")" CMakeLists.txt# cc @ home-pc in ~/Desktop [0:28:24]
$ cat -n CMakeLists.txt       1 cmake_minimum_required(VERSION 3.1)2    project(test)3  4   find_package(OpenCV 3 REQUIRED)5    message(STATUS "OpenCV_DIR = ${OpenCV_DIR}")6    file(GLOB_RECURSE sources src/*.cpp)7   add_exectuable(${PROJECT_NAME} SHARED ${sources})8  target_link_libraries(9     ${PROJECT_NAME}10       ${OpenCV_LIBS}11    )

3.在文件中删除行

参考:运用sed命令高效地删除文件的特定行

  • 删除第N行
sed -i 'Nd' file.txt
# 比如删除第一行:
sed -i '1d' file.txt
  • 删除最后一行
# $符号代表最后一行
sed -i '$d' file.txt
  • 删除从A到B连续几行
sed -i 'A,Bd' file.txt
# 比如删除5~7行:
sed -i '5,7d' file.txt

还有很多其他用法,见上面的参考博客

4.使用find查找文件,并用 | xargs传输文件名给sed命令

比如要在当前文件夹下找名为CMakeLists.txt的文件,找到后对他们使用sed命令进行内容修改。

  • 查看当前文件夹下哪些文件中有“OpenCV REQUIRED”(无用)
# -r代表递归搜索当前文件夹下的文件内容
grep -r "OpenCV REQUIRED"
  • 查看有哪些“CMakeLists.txt”文件(无用)
# -i参数代表不区分后面文件名的大小写查找
find ./ -iname "CMakeLists.txt"
  • 把“CMakeLists.txt”文件中原来的“OpenCV REQUIRED”统一替换成“OpenCV 3 REQUIRED”(实用)
# xargs是传递参数,好像和管道|有点重复?
find ./ -iname "CMakeLists.txt" | xargs sed -i "s/OpenCV REQUIRED/OpenCV 3 REQUIRED/g"

xargs是一个强有力的命令,它能够捕获一个命令的输出,然后传递给另外一个命令。

之所以能用到这个命令,关键是由于很多命令不支持|管道来传递参数,而日常工作中有有这个必要,所以就有了 xargs 命令,例如:

find /sbin -perm +700 |ls -l       #这个命令是错误的
find /sbin -perm +700 |xargs ls -l   #这样才是正确的

xargs 一般是和管道一起使用。

linux中sed -i命令修改文件内容、在文件中插入行、删除文件中删除行相关推荐

  1. linux远ssh sed,ssh远程执行sed -i命令,替换的内容中含有双引号的问题

    ssh远程执行sed -i命令,替换的内容中含有双引号的问题.在ssh 中执行sed -i 来替换匹配的字符串,当替换的内容中包含双引号"时,需要在转义的同时,加上单引号'"'. ...

  2. 使用linux中的convert命令修改图片大小

    使用linux中的convert命令修改图片大小: convert -resize 22x22 Valuair.png val.png 结果会保留原来的宽高比例. 如果要生成固定的22*22大小的图片 ...

  3. linux shell sed awk 命令(2)-awk

    linux shell sed awk 命令(2)-awk awk语法格式: awk [选项] -f program-file [ -- ] file ... 选项: -F fs, --field-s ...

  4. Linux改变图片大小的命令,Linux运维知识之linux下使用convert命令修改图片分辨率...

    本文主要向大家介绍了Linux运维知识之linux下使用convert命令修改图片分辨率,通过具体的内容向大家展现,希望对大家学习Linux运维知识有所帮助. Convert的resize子命令应该是 ...

  5. php 修改文件属性命令行,Linux_linux中如何通过命令修改文件属性,ls -l即可查看目录信息-rw - phpStudy...

    linux中如何通过命令修改文件属性 ls -l即可查看目录信息 -rwxr-xr-x 1 xura xura 1753786 2010-05-09 09:54 Grad 分别对应的是: 文件属性 连 ...

  6. 使用thinkPhp,修改线上数据库的配置,请删除 Runtime 中的所有内容后重试

    2019独角兽企业重金招聘Python工程师标准>>> 使用thinkPhp,修改线上数据库的配置,请删除 Runtime 中的所有内容后重试 转载于:https://my.osch ...

  7. Git入门之命令行删除文件及上传大文件至Github(二)

    自2013年开始,作者的代码基本是分享到CSDN下载区,最早设置均是免费的,但随着下载量增加,分数自动增长.为了更好地分享开源代码及相关工具,赶上时代潮流,作者后续会将代码分享至Github和CSDN ...

  8. 命令行删除文件夹及文件夹下文件

    如果文件夹下存储的文件很多(几个G或者几个T的数据),右键删除速度很慢,所以需要用到命令行删除,速度相对快很多.我整理了两个系统的删除方法,以此记录方便备查. Win10 cmd命令行删除文件夹及文件 ...

  9. windows 命令行删除文件和文件夹

    学习内容: windows 命令行删除文件和文件夹 假设删除d盘下的123文件夹 del/s/q d:\123*.* ----(用于删除文件夹下的子文件) rd/s/q d:\123 ----(用于删 ...

最新文章

  1. 开放一些3D视觉相关职位!
  2. linux time 统计命令执行的时间
  3. Boost.Asio入门
  4. 特征预处理--长尾分布的处理方案
  5. 安装完matlab7.0但无法运行
  6. 【学术相关】发表 SCI 论文有哪些实用工具?
  7. bzoj 2330: [SCOI2011]糖果
  8. python高效处理文件_使用Python语言高效地处理一个文本文件
  9. [CentOS] CentOS 6 IPv6 关闭方法
  10. 机器学习:异常检测算法Seasonal Hybrid ESD及R语言实现
  11. linux上启动git,linux上git操作与打jar包更新启动服务脚本
  12. MUI框架开发HTML5手机APP(一)--搭建第一个手机APP(转)
  13. Facebook反垃圾实践:人工治理与机器算法齐飞
  14. php使用地图插件,wordpress的百度地图插件怎么使用
  15. 黑苹果html5,黑苹果AppleALC声卡驱动安装使用教程 _ 黑苹果乐园
  16. 制作卡通人物的3种简单方法
  17. GPU服务器与CPU服务器的区别,如何选择GPU服务器
  18. Python中文文本分句
  19. 汇编 movl %gs:20, %eax 的作用
  20. MapSet哈希桶(基础+常用方法总结)

热门文章

  1. MacOS M1芯片 VMware部署CentOS8虚拟机及配置静态IP
  2. 10.10工作问题及解决
  3. AttributeError:module #x27tensorflow.python.keras.backend#x27 has no attribute #x27get_graph#x27
  4. socks服务搭建总结
  5. 黑魂复刻游戏的玩家控制器(基础移动,动画实现及优化)——Unity随手记(2021.3.15)
  6. Spark3.2教程(九)CentOS7下Spark Standalone分布式搭建
  7. 网络编程学习,项目er图
  8. 深入浅出Pytorch函数——torch.exp
  9. mysql 钩子程序_20200319 代码发布之任务发布钩子脚本
  10. Python用SMTP自动发送邮件email