当前位置:  技术问答>linux和unix

linux——新手提问(关于文件内容替换)

    来源: 互联网  发布时间:2017-03-21

    本文导语:  问题: 就是有一个Test.c文件,这个文件里的内容: # include void main(){    prinitf("hello linux"); } 因为由于printf拼错了嘛,所以想用一个文件里的内容去(不用vim或vi)修改他,就用printf替换掉prinitf! 大家知道怎么做嘛...

问题:
就是有一个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

    
 
 

您可能感兴趣的文章:

  • Docker官方镜像将会使用Alpine Linux替换Ubuntu
  • windows下的LPCTSTR类型在linux下用什么来替换?谢谢
  • linux下如何实现文件内容得查找替换
  • linux bash 字符串替换的问题?
  • linux中如何替换所有的标点符号
  • LINUX如何替换一个变量中的字符?
  • 如何卸载linux自带的mysql,并替换为新版本啊
  • Linux下怎么替换指定行指定列
  • 用一个linux版本替换另一个,怎么做?
  • 在linux命令如何实现文本替换?
  • 【求助】请问如何替换LINUX中默认的GCC编译器?谢谢!
  • 请大家提供一些资料和指点迷津:关于linux ns网络仿真系统下的web缓存替换算法的资料,,谢谢!
  • linux用shell替换文本问题
  • 请教:如何在linux或者vim下处理这类文本文件的查找替换问题?
  • 鸟哥的linux私房菜里面说道mv这个命令加-f可以直接替换,这里有问题,描述如下
  • Linux Sed 命令替换windows下面的回车换行符
  • linux新手提问, .sh文件的写法提问。 从.bat文件转为.sh文件。
  • LINUX新手提问,如何在LINUX下添加语言项?
  • 新手提问:在REDHAT LINUX 下开发应用程序,用什么工具好,除了 LINUX C以外
  • [请置顶]关于Linux的安装使用问题 请放到 软件使用/操作系统 里提问
  • 初学者提问:可以在Linux上运行exe程序吗?
  • 新手提问:学习c++同时也想学习unix和linux
  • linux内核学习及工作的提问
  • 菜鸟提问linux
  • [菜鸟提问]关于linux下的java编程
  • <新手提问>LINUX下串口收不到数据的问题
  • 新人提问:linux下编辑器的问题
  • 新手提问linux安装问题
  • 请问各位大哥。谁知道LINUX下怎么安装软件包!!! (高分提问)
  • 初学者提问,关于嵌入式linux的硬件平台及其报价
  • 在linux下如何用gcc连接远端Oracle数据库?(菜鸟提问,大虾快答)
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 想找共同学习Linux的新手,一起学习,共同成长
  • Linux新手问,Linux安装问题。
  • 新手有关linux的问题!
  • 本人linux新手,想问linux语法问题
  • 我是一个linux新手,不知道如何在linux进行C语言的编写和使用?
  • 新手学习linux 有些疑惑
  • 新手学习linux的问题
  • Linux新手请教声卡驱动!!!!!!!!!!!
  • 新手请教Linux和ubuntu
  • 大家好,我是linux新手,有些问题请教
  • 新手学linux,关于vmware tools的问题。
  • linux新手问题
  • 新手学linux
  • linux 分区 储存问题,纠结,想不明白了(新手)
  • linux新手想请问大家你们在linux下通常用什么开发语言和工具(C多点还是C++多点还是pascal ?还有工具方面?)
  • Linux新手学习
  • 要加入linux编程队伍,新手需注意什么
  • 我是个新手没用过linux请指教
  • 新手入门请教各位前辈linux
  • Linux新手
  • linux c/c++ IP字符串转换成可比较大小的数字
  • 在win分区上安装linux和独立分区安装linux有什么区别?可以同时安装吗?(两个linux系统)
  • linux哪个版本好?linux操作系统版本详细介绍及选择方案推荐
  • 在虚拟机上安装的linux上,能像真的linux系统一样开发linux程序么?
  • secureCRT下Linux终端汉字乱码解决方法
  • 我重装window后,把linux的引导区覆盖了,进不了linux怎么办?急啊,望热心的人帮助 (现在有linux的盘)
  • Linux c字符串中不可打印字符转换成16进制
  • 安装vmware软件,不用再安装linux系统,就可以模拟linux系统了,然后可以在其上学习一下LINUX下的基本操作 了?
  • Linux常用命令介绍:更改所属用户群组或档案属性
  • 红旗Linux主机可以通过127.0.0.1访问,但如何是连网的Win2000机器通过Linux的IP去访问Linux
  • linux命令大全详细分类介绍及常用linux命令文档手册下载


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3 iis7站长之家