方法一:
使用perl ,命令如下:
下面这个例子就是将当前目录及所有子目录下的所有pom.xml文件中的
""
替换为
"".
这里用到了Perl语言,
perl -pi -e 在Perl 命令中加上-e 选项,后跟一行代码,那它就会像运行一个普通的Perl 脚本那样运行该代码.
方法二:
使用sed命令如下:
Linux下批量替换多个文件中的字符串的简单方法.用sed命令可以批量替换多个文件中的字符串.
例如:我要把aaa替换 为bbb,执行命令:
这是目前linux最简单的批量替换字符串命令了!
具体格式如下:
实例代码:
sed流程:sed通过一次仅读取一行内容来对某些指令进行处理后输出.
①.、sed通过文件或管道读取文件内容,但sed默认并不直接修改源文件,而是将读入的内容复制到缓冲区中,称之为模式空间.
sed基本语法格式:
用法:sed[选项]...{脚本指令}[输入文件]...
选项: -version 显示sed版本
-help :显示帮助文档
-n,-quiet,-silent静默输出,默认情况下,sed程序在所有的脚本指令执行完毕后,将自动打印模式空间中的内容.
-e script允许多个脚本指令被执行
-f script-file从文件中读取脚本指令,对编写自动化脚本程序很实用
-i ,-in-place 该选项直接修改源文件
-l N 该选项指定l指令可以输出的行长度,l指令为输出非打印字符.
-posix 禁用GNU sed扩展功能.
-r 在脚本指令中使用扩展正则表达式.
-s,-separate 默认情况下,sed将把输入的多个文件名作为一个长的连续的输入流.而GNU sed则允许把它们当作单独的文件.
-u,-unbuffered 最低限度的缓存输入与输出
a,append表示追加指令;
i,insert表示插入指令;
d,delete表示删除指令;
s,substitution表示替换指令.
sed脚本指令的基本格式是:
[地址,即路径]命令(有些命令仅可以对一行操作,有些可以对多行操作),命令也可以用花括号进行组合,使命令序列可以作用于同一个地址.
address{
command1
}
sed的基本工作方式是:
sed的替换命令s:
为什么要有多行模式: 配置文件一般有单行出现,但也有使用json或XML格式的配置文件,为多行出现.
多行模式处理命令N、D、P
分别是:命令模式、文本输入模式、和末行模式.
第一:命令行模式:
第二:文本输入模式:
在命令模式下输入命令i、附加命令a、打开命令o、修改命令c、取代命令r或替换命令s都可以进入文本输入模式.在该模式下,用户输入的任何字符都被vi当作文件内容保护起来,并将其显示在屏幕上.在文本输入过程中,若想回到命令模式下,按ESC键即可.
第三:末行模式:
实例演示
首先我们使用命令 vi filename 打开一个文件,这个时候进入到的是命令模式
此时此刻呢我们按i,然后键盘随便输入写内容.
然后按ESC重新进入到命令模式.
在命令模式的情况下,我们按:,进入到了末行模式.
我们输入wq!,然后回车,强行保存退出.
下次我们再打开对应文件(可用less filename命令打开),即可看到内容已经更改.
补充:
(1)末行模式下:q! 【强制退出不保存】 q【退出不保存】 wq【退出并保存后面也可以加个!】
更多命令
进入vi的命令:
vi filename :打开或新建文件,并将光标置于第一行首
vi ◆n filename :打开文件,并将光标置于第n行首
vi ◆ filename :打开文件,并将光标置于最后一行首
vi ◆/pattern filename:打开文件,并将光标置于第一个与pattern匹配的串处
屏幕翻滚类命令:
Ctrl◆u:向文件首翻半屏
Ctrl◆d:向文件尾翻半屏
Ctrl◆f:向文件尾翻一屏
Ctrl+b;向文件首翻一屏
nz:将第n行滚至屏幕顶部,不指定n时将当前行滚至屏幕顶部.
插入文本类命令:
i :在光标前
I :在当前行首
a:光标后
A:在当前行尾
o:在当前行之下新开一行
O:在当前行之上新开一行
r:替换当前字符
R:替换当前字符及其后的字符,直至按ESC键
s:从当前光标位置处开始,以输入的文本替代指定数目的字符
S:删除指定数目的行,并以所输入文本代替之
ncw或nCW:修改指定数目的字
nCC:修改指定数目的行
删除命令:
ndw或ndW:删除光标处开始及其后的n-1个字
do:删至行首
d$:删至行尾
ndd:删除当前行及其后n-1行
x或X:删除一个字符,x删除光标后的,而X删除光标前的
Ctrl◆u:删除输入方式下所输入的文本
搜索及替换命令:
/pattern:从光标开始处向文件尾搜索pattern
pattern:从光标开始处向文件首搜索pattern
n:在同一方向重复上一次搜索命令
N:在反方向上重复上一次搜索命令
撤销回退命令:
u 撤销上一步的操作
Ctrl◆r 恢复上一步被撤销的操作
选项设置:
all:列出所有选项设置情况
term:设置终端类型
ignorance:在搜索中忽略大小写
list:显示制表位(Ctrl◆I)和行尾标志($)
number:显示行号
report:显示由面向行的命令修改过的数目
terse:显示简短的警告信息
warn:在转到别的文件时若没保存当前文件则显示NO write信息
nomagic:允许在搜索模式中,使用前面不带"\"的特殊字符
nowrapscan:禁止vi在搜索到达文件两端时,又从另一端开始
mesg:允许vi显示其他用户用write写到自己终端上的信息
末行模式命令:
:w :保存当前文件
:x:保存当前文件并退出
:q:退出vi
:q!:不保存文件并退出vi
:wq:保存并退出
:!command:执行shell命令command
:r!command:将命令command的输出结果放到当前行
寄存器操作:
"?nyy:将当前行及其下n行的内容保存到寄存器?中,其中?为一个字母,n为一个数字
"?nyw:将当前行及其下n个字保存到寄存器?中,其中?为一个字母,n为一个数字
"?nyl:将当前行及其下n个字符保存到寄存器?中,其中?为一个字母,n为一个数字
"?p:取出寄存器?中的内容并将其放到光标位置处.这里?可以是一个字母,也可以是一个数字
ndd:将当前行及其下共n行文本删除,并将所删内容放到1号删除寄存器中.
①.、vi命令下的查找和替换
①1 vi下的查找
/helloEnter :向下查找hello匹配字符串
helloEnter:向上查找hello匹配字符串
使用了查找命令之后,使用如下两个键快速查找:
n:按照同一方向继续查找
N:按照反方向查找
hello是需要匹配的字符串,例如:
/nameEnter? ? ? #查找name
/nameEnter? ? #查找name单词(注意前后的空格)
除此之外,hello还可以使用一些特殊字符,包括(/、^、$、*、.),其中前三个这两个是vi与vim通用的,"/"为转义字符.
/^nameEnter? ? #查找以name开始的行
/name$Enter? ? #查找以name结束的行
//^nameEnter? ? #查找^name字符串
:s/name/title/? ? ? ? #替换当前行第一个 name 为 title
:s/name/title/g? ? #替换当前行所有 name 为 title
:n,$s/name/title/? ? #替换第 n 行开始到最后一行中每一行的第一个 name 为 title
:n,$s/name/title/g? ? #替换第 n 行开始到最后一行中每一行所有 name 为 title
#(n 为数字,若 n 为 .,表示从当前行开始到最后一行)
:%s/name/title/? ? ? ? #(等同于 :g/name/s//title/) 替换每一行的第一个 name 为 title
:%s/name/title/g? ? #(等同于 :g/name/s//title/g) 替换每一行中所有 name 为 title
可以使用 #或◆ 作为分隔符,此时中间出现的 / 不会作为分隔符
:s#name/#title/#? ? ? ? 替换当前行第一个 name/ 为 title/
:%s◆/oradata/apras/◆/user01/apras1◆ (
使用◆ 来 替换 / ): /oradata/apras/替换成/user01/apras1/
命令:sed -i s/yyyy/xxxx/g ◆grep yyyy -rl --include="*.txt" ./◆
作用:将当前目录(包括子目录)中所有txt文件中的yyyy字符串替换为xxxx字符串.其中,
-i 表示操作的是文件,◆◆括起来的grep命令,表示将grep命令的的结果作为操作文件.
s/yyyy/xxxx/表示查找yyyy并替换为xxxx,后面跟g表示一行中有多个yyyy的时候,都替换,而不是仅替换第一个
另外,如果不需要查找子目录,仅需要在当前目录替换,用sed命令就行了,命令如下:sed -i s/xxxx/yyyy/g ./*.txt
命令格式:find -name '要查找的文件名' | xargs perl -pi -e 's|被替换的字符串|替换后的字符串|g'
#查找替换当前目录下包含字符串并进行替换
find -name '*.txt' | xargs perl -pi -e 's|江苏|上海|g'
#递归查找替换
find . -type f -name '*.html' | xargs perl -pi -e 's|苏州|上海|g'
①grep:找出文件中含有关键字的行
查看刚才是否些文件成功
有一些脚本是依据文件名进行各种处理的.我们可能会需要在保留扩展名的同时修改文件名,转换文件格式或提取部分文件名.
以上就是土嘎嘎小编为大家整理的linux替换文本的命令相关主题介绍,如果您觉得小编更新的文章只要能对粉丝们有用,就是我们最大的鼓励和动力,不要忘记讲本站分享给您身边的朋友哦!!