问题:

就是有一个Test.c文件,这个文件里的内容:

# include

void main(){

prinitf("hello linux");

}

因为由于printf拼错了嘛,所以想用一个文件里的内容去(不用vim或vi)修改他,就用printf替换掉prinitf!

大家知道怎么做嘛?

如果会做,麻烦多花点时间,解释写详细点,号码?

先谢谢了大家了!

|

呵呵,不用谢!我也还是个菜鸟,接触Linux还并不多。推荐你看看《unix高级环境编程》,其中讲了很多Linux的相关知识。学习Shell的话,可以看我之前回答中提到的《Linux与unix shell编程指南》,其中每个shell命令都有详细的使用示例。

|

sed 就是一个命令(程序),处理文本文件很好用,配合正则表达是就更强大了。

sed运行在shell下。

末行模式,这个名词大概就是vim中才有的词汇吧。

|

对于编辑文本格式的文件:

1.  vi 基本上linux都自带,甚至vim. 不知为何不使用vi (的确是个高效的编辑器)

简单指令 (vi 中)  :1,10s/print/printf/g

在第1行到第10行,查找(Search) print(或其他正则表达式)并且全部(g)替换成printf 。

"/"符号是域分隔符。冒号":"是vim命令的起始符

具体 man vim ,谷歌 vim 查找 替换

2. sed (Stream edit 流编辑器 )处理文本的利器.linux基本有.

简单指令(bash中) sed  '1,10s/print/printf/g' 文件名

在第1行到第10行,查找print并且全部替换成printf .

sed会将文本输出至标准输出设备(一般是屏幕),所以 你可能需要使用输出重定向符(>)将其保存到另一个文件:

sed  '1,10s/print/printf/g' 文件名 > 另一个文件

具体 man sed ,谷歌 sed 查找替换

3. 其他文本编辑器 如Emacs,nano,ed等用的不多。不太清楚。相见百科 https://zh.wikipedia.org/wiki/%E6%96%87%E6%9C%AC%E7%BC%96%E8%BE%91%E5%99%A8%E6%AF%94%E8%BE%83

另: 如果楼主想用自己的方式修改其中的内容。最简单的就是c语言写一段小程序,主要涉及文件读写操作。

fread,fwrite等系统调用会用得着。注意小心别覆盖错了原文件。

然后编写字符串匹配功能,查找字符串。将修改的字符在依次写到新文件中。

具体参考man手册 man 3 fread 和 man 3 fwrite

基本上就是这样了 :)

|

那我是否可以这样理解。change.txt文件中存储的内容为printf,通过外部使用若干条命令将test.c文件中错误的prinitf字符串更改为change.txt中的内容。

如果如此,可以通过3条命令来完成:

CHANGE=$(cat change.txt)

首先声明一个变量CHANGE,将它赋值为cat change.txt命令的值,此时,CHANGE变量中存储的即为printf。

sed "s/prinitf/$CHANGE/g" test.c > tmp_test.c

接着使用sed命令匹配test.c文件中的prinitf,并将其更改为CHANGE的值。至此,错误的prinitf就被更改为printf了(关于sed命令的使用方法,请参阅《Linux与unix shell编程指南》第10章,其中有详细的使用示例)。但由于sed命令修改的是原文件在内存中的一份拷贝,所以需要将修改结果保存起来,将其重定向到中间文件tmp_test.c。

mv tmp_test.c test.c

最后将中间文件覆盖原文件。

可以将这3条命令组合在一起让shell依次执行,每个命令间用;隔开。

CHANGE=$(cat change.txt);sed "s/prinitf/$CHANGE/g" test.c > tmp_test.c;mv tmp_test.c test.c

|

我提供一个吧

假设楼主源代码长这样:文件是print.c

#include

int main()

{

say("hellow worldn");

return 0;

}

很明显,没有say这个函数或者宏定义,使用如下编译命令:

#gcc print.c

肯定会提示找不到say函数,从而编译失败。

如果你换成这样子的编译命令:

#gcc print.c -D say=printf

那么就编译成功了,不需要改任何源代码。

|

for file in `ls your_directory`; do perl -n -e 's/prinitf/printf/; print' $file; done

|

linux通常都有perl。上面使用shell遍历某个目录的文件,使用perl将修改的文件内容打到标准输出。

其实应当再调整一下,先把原文件改个名,然后把perl的输出打到文件里。

for file in `ls your_directory`; do mv $file $file.old; perl -n -e 's/prinitf/printf/; print' $file.old >$file; done

|

Perl是一个脚本语言,perl是它的主程序。-e选项让你把perl源代码放在后面的参数里。-n选项让perl程序运行在一个循环的循环体中:这个循环每次读取文件中的一行,赋给$_变量,而所要读取的文件名作为程序的参数放在最后面传进来。这两个选项一起用,会让perl以类似sed -n的方式工作。

|

sed -i 's/printif/printf/' file

linux 命令tf,linux——新手提问(关于文件内容替换)相关推荐

  1. linux 命令tf,Linux文件管理命令

    本篇涉及命令:cat,tac,more,less,head,tail,file,stat,touch,which,whatis,whereis,ls,mkdir,rmdir,tree,cp,mv,rm ...

  2. Linux命令+shell脚本大全:查看文件内容

    Linux中有几个命令可以查看文件的内容,而不需要调用其他文本编辑器(参见第10章).本 节将演示一些可以帮助查看文件内容的命令. 3.8.1 查看文件类型 在显示文件内容之前,应该先了解一下文件的类 ...

  3. 测试过程中常用的linux命令之【查找指定的文件内容】

    之前遇到过这种情况,在查看日志定位问题时,会将log 传输到本地,然后用本地的文本编辑工具打开文件,然后查找关键字,再进行分析. 这样做无疑会降低效率. 整理了几个常用的命令,可以进行快速的查找. 测 ...

  4. 【转】Linux命令行下svn ignore忽略文件或文件夹用法

    转自:Linux命令行下svn ignore忽略文件或文件夹用法 - 陌上归人的博客 - 博客园 一.忽略单个目录 1.忽略文件夹 假如目录oa.youxi.com是从svn checkout出来的, ...

  5. linux 批量传文件大小,小弟我使用过的Linux命令之rz - 批量下传文件,简单易用...

    我使用过的Linux命令之rz - 批量上传文件,简单易用 我使用过的Linux命令之rz - 批量上传文件,简单易用 本文链接:http://codingstandards.iteye.com/bl ...

  6. 使用Linux命令删除Android的一些垃圾文件

    Linux命令删除Android的一些垃圾文件 在/sdcard/根目录使用find命令进行匹配查找,查找结果管道到xargs,xargs分割结果传给rm -rf. 命令1:查找隐匿文件,排除&quo ...

  7. Linux命令进阶-cpu监控内存监控文件IO网络IO性能分析

    Linux命令进阶-cpu监控内存监控文件IO网络IO性能分析 前言 1 linux基础命令 1.1 grep 1.2 ls 1.3 find 1.4 ulimit 1.5 curl 1.6 scp ...

  8. Linux命令学习笔记之一目录与文件基本操作

    目录操作 cd:进入目录 基本格式:cd 目录名 例子: 1).在当前目录进入子目录a,输入"cd a" 2).在当前目录进入根目录下的子目录tmp,输入"cd /tmp ...

  9. linux在cd后直接显示文件格式,Linux命令学习笔记之一目录与文件基本操作

    目录操作 cd:进入目录 基本格式:cd 目录名 例子: 1).在当前目录进入子目录a,输入"cd a" 2).在当前目录进入根目录下的子目录tmp,输入"cd /tmp ...

最新文章

  1. java web项目流程小结
  2. Jmeter性能测试之ForEach控制器的使用
  3. qtcreator摄像头显示时间_屏下摄像头手机量产了,然后呢?
  4. 导语3——node以及npm
  5. 前端进阶之路: 前端架构设计(2)-流程核心
  6. @Deprecated新外观可能是什么?
  7. 技巧分享 PDF如何删除数字签名
  8. php中三元运算符用法
  9. 其利断金前一句是什么_过来人的忠告:女孩结婚前务必要想清楚这4件事,再结婚不晚...
  10. [转载]Badboy使用教程
  11. 美国数据不佳美元仍跳升,只因欧元区问题更多
  12. 如何学习数据库?数据库零基础入门指导
  13. java中分解json数据,java解析JSON数据详解
  14. 开发本地O2O分销系统有什么优势 O2O电子商务模式有哪些特点?
  15. pythonpost请求json_将JSON字符串作为post请求发送
  16. 中国绿色专利分地区统计数据
  17. 一种很厉害的AI学习方式
  18. spring boot项目报错:Validation failed for query for method public abstract...
  19. 我是学计算机的表情包,我是一个热爱学习的人表情包
  20. android4.3从app到kernel代码追踪gsensor所遇到的问题

热门文章

  1. mysql 5.6 linux 64_Linux64位服务器编译安装MySQL5.6(CentOS6.4)
  2. MySQL的四种事务隔离级别实践
  3. zabbix邮件内容乱码与邮件内容为附件解决办法
  4. cogs 167. [USACO Mar07] 月度花费
  5. Ext.state.Manager.setProvider(new Ext.state.CookieProvider())
  6. 国内ip信息库的组建
  7. Debugging with GDB (6) gdb 命令
  8. poj2406 Power Strings
  9. 学习:MOSS2007 实现单点登陆(转)
  10. Transformer开始往动态路由的方向前进了!厦大华为提出TRAR,在VQA、REC上性能SOTA!(ICCV 2021)...