cod*_*ama 8 linux perl awk command-line sed
我有一个巨大的SQL文件,可以在服务器上执行.转储来自我的机器,其中有一些与我的机器相关的设置.所以基本上,我希望每一次出现"c://temp"都被替换"//home//some//blah"
如何从命令行完成?
Vin*_*vic 29
sed是大文件的不错选择.
sed -i.bak -e 's%C://temp%//home//some//blah%' large_file.sql
Run Code Online (Sandbox Code Playgroud)
这是一个很好的选择,因为不会立即读取整个文件来更改它.引用手册:
流编辑器用于对输入流(文件或来自管道的输入)执行基本文本转换.虽然在某些方面类似于允许脚本编辑(例如ed)的编辑器,但是sed通过仅对输入进行一次传递来工作,因此更有效.但它是能够在管道中过滤文本的能力,这特别将其与其他类型的编辑器区分开来.
相关的手册部分在这里.接下来是一个小解释
-i.bak允许进行编辑,留下扩展名为.bak的备份副本
s%foo%bar%使用s,即替换命令,它替换第二个字符串'bar'的%符号'foo'之间的第一个字符串的匹配项.它通常写成s //但是因为你的字符串有很多斜杠,所以更方便的是将它们改为其他东西,这样你就可以避免它们逃脱它们.
例
vinko@mithril:~$ sed -i.bak -e 's%C://temp%//home//some//blah%' a.txt vinko@mithril:~$ more a.txt //home//some//blah D://temp //home//some//blah D://temp vinko@mithril:~$ more a.txt.bak C://temp D://temp C://temp D://temp
ire*_*ses 12
只是为了完整.到位使用替换perl.
perl -i -p -e 's{c://temp}{//home//some//blah}g' mysql.dmp
Run Code Online (Sandbox Code Playgroud)
也不需要反斜杠转义.;)