问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

总结linux替换字符串的几种方法

发布网友 发布时间:2022-04-20 23:12

我来回答

3个回答

热心网友 时间:2022-04-10 04:34

一)通过vi编辑器来替换。
vi/vim 中可以使用 :s 命令来替换字符串。
:s/well/good/ 替换当前行第一个 well 为 good
:s/well/good/g 替换当前行所有 well 为 good
:n,$s/well/good/ 替换第 n 行开始到最后一行中每一行的第一个 well 为 good
:n,$s/well/good/g 替换第 n 行开始到最后一行中每一行所有 well 为 good
n 为数字,若 n 为 .,表示从当前行开始到最后一行
:%s/well/good/(等同于 :g/well/s//good/) 替换每一行的第一个 well 为 good
:%s/well/good/g(等同于 :g/well/s//good/g) 替换每一行中所有 well 为 good
可以使用 # 作为分隔符,此时中间出现的 / 不会作为分隔符
:s#well/#good/# 替换当前行第一个 well/ 为 good/
:%s#/usr/bin#/bin#g 可以把文件中所有路径/usr/bin换成/bin

 

(二)直接替换文件中的字符串。(此法不用打开文件即可替换字符串,而且可以批量替换多个文件。)
1.perl命令替换,参数含义如下:
-a    自动分隔模式,用空格分隔$_并保存到@F中。相当于@F = split ”。分隔符可以使用-F参数指定
-F    指定-a的分隔符,可以使用正则表达式
-e    执行指定的脚本。
-i<扩展名>   原地替换文件,并将旧文件用指定的扩展名备份。不指定扩展名则不备份。
-l    对输入内容自动chomp,对输出内容自动添加换行
-n    自动循环,相当于 while(<>) { 脚本; }
-p    自动循环+自动输出,相当于 while(<>) { 脚本; print; }
用法示例:
perl -p -i.bak -e 's/\bfoo\b/bar/g' *.c
将所有C程序中的foo替换成bar,旧文件备份成.bak

perl -p -i -e "s/shan/hua/g" ./lishan.txt ./lishan.txt.bak
将当前文件夹下lishan.txt和lishan.txt.bak中的“shan”都替换为“hua”

perl -i.bak -pe 's/(\d+)/ 1 + $1 /ge' file1 file2
将每个文件中出现的数值都加一

 

 

2.sed命令下批量替换文件内容   

格式: sed -i "s/查找字段/替换字段/g" `grep 查找字段 -rl 路径` 文件名

-i 表示inplace edit,就地修改文件

 -r 表示搜索子目录

 -l 表示输出匹配的文件名
s表示替换,d表示删除

示例:sed -i "s/shan/hua/g"  lishan.txt

          把当前目录下lishan.txt里的shan都替换为hua       各个Linux详细命令介绍及应用可如下进行查找

热心网友 时间:2022-04-10 05:52

(1)VIM替换字符串方法
1. 基本替换
:s/str1/str2/ 替换当前行第一个str1为str2
:s/str1/str2/g 替换当前行所有str1为str2
:n,$s/str1/str2/ 替换第 n 行开始到最后一行中每一行的第一个str1为str2
:n,$s/str1/str2/g 替换第 n 行开始到最后一行中每一行所有str1为str2
(n 为数字,若 n 为 .,表示从当前行开始到最后一行)
:%s/str1/str2/(等同于 :g/str1/s//str2/) 替换每一行的第一个str1为str2
:%s/str1/str2/g(等同于 :g/str1/s//str2/g) 替换每一行中所有str1为str2
2. 可以使用 # 作为分隔符,此时中间出现的 / 不会作为分隔符
:s#str1/#str2/# 替换当前行第一个str1/ 为str2/
:%s+/str11/str12/+/str21/str22+ (使用+ 来 替换 / ): /str11/str12/替换成/str21/str22/
3. 文件中删除^M
问题描述:对于换行,Windows下用回车换行(0A0D)来表示,Linux下是回车(0A)来表示。这样,将window上的文件拷到Unix上用时,总会有个^M,请写个用在Unix下的过滤Windows文件的换行符(0D)的shell或c程序。有两种方法可以完成此目的:
(1)使用命令:cat oldfilename | tr -d “^V^M” > newfilename
(2)使用命令:sed -e “s/^V^M//” oldfilename > newfilename
需要注意的是在1、2两种方法中,^V和^M指的是Ctrl+V和Ctrl+M。你必须要手工进行输入,而不是粘贴。
在vim中处理:首先使用vim打开文件,然后按ESC键,接着输入命令:
:%s/^V^M//
:%s/^M$//g
如果上述方法无用,则正确的解决办法是:
(1) tr -d "\r" < old_file_name > new_file_name 或者 cat oldfilename | tr -d "\r" > new_file_name
(2) tr -d "\015" < old_file_name > new_file_name或者 cat oldfilename | tr -d "\015" > new_file_name
strings A>B
4. 其它技巧
利用 :s 命令可以实现字符串的替换。具体的用法包括:
:s/str1/str2/ 用字符串 str2 替换行中首次出现的字符串 str1
:s/str1/str2/g 用字符串 str2 替换行中所有出现的字符串 str1
:.,$ s/str1/str2/g 用字符串 str2 替换正文当前行到末尾所有出现的字符串 str1
:1,$ s/str1/str2/g 用字符串 str2 替换正文中所有出现的字符串 str1
:g/str1/s//str2/g 功能同上
从上述替换命令可以看到:g 放在命令末尾,表示对搜索字符串的每次出现进行替换;不加 g,表示只对搜索字符串的首次出现进行替换;g 放在命令开头,表示对正文中所有包含搜索字符串的行进行替换操作。
(2)sed命令替换字符串
sed替换的基本语法为:
代码如下:

sed
's/原字符串/替换字符串/'
单引号里面,s表示替换,三根斜线中间是替换的样式,特殊字符需要使用反斜线”\”进行转义,但是单引号”‘”是没有办法用反斜线”\”转义的,这时候只要把命令中的单引号改为双引号就行了,例如:

代码如下:

sed "s/原字符串包含'/替换字符串包含'/"
//要处理的字符包含单引号
命令中的三根斜线分隔符可以换成别的符号,这在要替换的内容有较多斜线是较为方便,只需要紧跟s定义即可,例如换成问号”?”:

代码如下:

sed 's?原字符串?替换字符串?'
//自定义分隔符为问号
可以在末尾加g替换每一个匹配的关键字,否则只替换每行的第一个,例如:
代码如下:

sed 's/原字符串/替换字符串/'
//替换所有匹配关键字
上箭头”^”表示行首,美元”$”符号如果在引号中表示行尾,但是在引号外却表示末行(最后一行),这里犯二了,搜了半天哪个符号表示首行,半天才想起来,首行就是数字”1″啊.那么在行首和行尾添加字符串就是把行尾和行首替换,例如:

代码如下:

sed 's/^/添加的头部&/g' //在所有行首添加
sed
's/$/&添加的尾部/g' //在所有行末添加
sed '2s/原字符串/替换字符串/g' //替换第2行
sed
'$s/原字符串/替换字符串/g' //替换最后一行
sed '2,5s/原字符串/替换字符串/g' //替换2到5行
sed
'2,$s/原字符串/替换字符串/g' //替换2到最后一行
替换样式可以多个在同一条命令中执行,用分号”;”分隔,例如:

代码如下:

sed 's/^/添加的头部&/g;s/$/&添加的尾部/g'
//同时执行两个替换规则
sed处理过的输出是直接输出到屏幕上的,要保存可以将输出重定向,或者使用参数”i”直接在文件中替换:

代码如下:

sed -i 's/原字符串/替换字符串/g' filename
//替换文件中的所有匹配项

热心网友 时间:2022-04-10 07:26

实现目录文件递归替换: 1、find目录下的所有文件内容脚本 #!/bin/bash str=xx #原文字符串 cstr=yy#替换成的字符串 dir=/home/test#指定目录 for i in `find $dir -type f ` do if grep $str $i #测试原文字符串
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
八月中国最凉快的地方 八月份哪里最凉快,去哪旅游好?美丽的地方 乱字同韵字是什么意思 华硕笔记本电脑触摸板怎么开笔记本电脑触摸板怎么开启和关闭_百度知 ... 陕西职务侵占案立案准则 结婚后我的恋情维系了十年,怎么做到的? 玉米仁子饭产自哪里 中国期货交易所的交易品种有哪些? 历史要怎么读,有啥诀窍 高中历史诀窍 在linux系统中OC编程如何实现字符串连接 linux下如何替换文件中每一行指定位置字符串 linux c语言字符串连接函数 在linux中查找字符串用什么命令 linux的中文字符串怎么输入? Linux下的c编程:系统调用 关于linux下C语言遇到的问题 希望朋友们帮忙解答一下。。。。。。。。 linux中用shell时奇怪的字符串拼接和时间计算问题 linux中怎么样拼接字符串 以爱,带给我力量为题,写一篇800字左右的作文。 让什么永驻心中作文 作文永驻心间六百字左右 《让——永驻心中》怎么写 文章:让爱永驻心里 或者 永恒的美丽 “让爱占据我心”写一篇800字作文 让爱永驻我家作文 求一篇初三作文《让爱在心底永驻》600字 初中作文 让___驻我心中 求帮忙,作文“让爱永驻心中”600 让爱永驻心中作文演讲稿 linux下c语言怎样把字符串与整数连接起来 我想知道SHELL命令下字符串拼接 shell字符串拼接 Linux文本处理之如何比较很长的字符串 linux c语言字符串比较问题 Linux字符串截取几种方法 linux 字符串中插入换行 shell 如何 拼接字符串 linux怎么匹配除了字符串的字符 有没有好用免费的视频编辑软件,图片转视频的那种 银行贷款为什么要加BP? 银行理财中的10bp是什么意思 利率中的bp是什么意思 银行间债券业务的DVP、BP是什么意思? 银行bp是按照网签的还是 央行降准100bp,100bp代表什么意思 描述利率的&quot;BP&quot;是什么意思? 所谓银行利率加20个bp怎么算? 电脑上没有word文档 怎么安装 电脑怎样安装word文档