linux 给文件替换字符串/替换内容/替换某行 (shell,sed)

本文是要讲linux 不打开文档/文件的情况下,替换文本内容。
打开文档,在文档/文件内替换内容的,可以用vim,可参考这篇文章vim 替换文本 。

话题相关
#linux 文件替换字符串
#sed 字符串替换
#shell 文件替换某行
#linux 替换指定行内容
#linux 替换某行

linux一般用sed来替换文本到指定行。

基本语法

s (substitute)为查找替换命令

# 在输出或打印中,替换字符串。并不改变原文件内容
sed ‘作用范围s/替换查找目标/替换成为/替换目标option‘ 文件名

# 替换字符串,并更改原文件内容
# 在sed后面加 -i,即编辑文档“edit files in place”选项
sed -i ‘作用范围s/替换查找目标/替换成为/替换目标option‘ 文件名
1
2
3
4
5
6
例,sed ‘s/cat/dog/g’ pet.txt
在全局范围(s前的作用范围无内容)查找cat并替换为dog,作用范围内每一行出现的不仅第一个目标,而是所有目标都会被替换(g)。

作用范围选项

作用范围在全文的每一行,不写内容
# 作用范围在全文
sed ‘s/cat/dog/g‘ pet.txt
1
2
这一点这vim中的作用范围不太一样,vim中不写作用范围是作用于光标所在的当前行,而sed是指全文范围的每一行。

指定行,写上行号;指定某行到某行,用逗号连接行号
# 作用范围在第1行
sed ‘1s/cat/dog/g‘ pet.txt

# 作用范围在第6行到第10行
sed ‘6,10s/cat/dog/g‘ pet.txt

# 作用范围在第6行到最后一行
sed ‘6,$s/cat/dog/g‘ pet.txt

# 作用范围在指定行到其后2行,用加号(减号不可用)
sed ‘1,+2s/cat/dog/g‘ pet.txt
1
2
3
4
5
6
7
8
9
10
11
替换查找目标 写法

替换某个字符串,就写这个字符串。
这是最基本的用法。
# 替换cat这个字符串
sed ‘1s/cat/dog/g‘ pet.txt
1
2
替换整行,用.*
个人经验,替换一整行的情况是用的最多的。
# 替换第1行一整行为dog
sed ‘1s/.*/dog/‘ pet.txt
# 这里因为.*已代表一整行,所有后面写上/g和上面相同效果
sed ‘1s/.*/dog/g‘ pet.txt

# 替换全文的每1行为dog
sed ‘s/.*/dog/‘ pet.txt
# 这里因为.*已代表一整行,所有后面写上/g和上面相同效果
sed ‘s/.*/dog/g‘ pet.txt
1
2
3
4
5
6
7
8
9
例,

$ cat test.txt
a,b,c
a,b,c
# 替换第1行整行
$ sed ‘1s/.*/hello/g‘ test.txt
hello
a,b,c
$ sed ‘1s/.*/hello/‘ test.txt
hello
a,b,c

# 替换全文每一行的全部内容
$ sed ‘s/.*/hello/g‘ test.txt
hello
hello
$ sed ‘s/.*/hello/‘ test.txt
hello
hello
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
替换一个字符,用.
这个用的相对少一些。
# 替换第1行的每一个字符
sed ‘1s/./dog/g‘ pet.txt

# 替换第1行的第1个字符
sed ‘1s/./dog/‘ pet.txt

# 替换第1行的第5个字符
sed ‘1s/./dog/5‘ pet.txt
1
2
3
4
5
6
7
8
例,

$ echo ‘123‘|sed ‘s/./dog/g‘
dogdogdog
$ echo ‘123‘|sed ‘s/./dog/‘
dog23
$ echo ‘123‘|sed ‘s/./dog/3‘
12dog
# 字符也包括符号
$ echo ‘,123‘|sed ‘s/./dog/1‘
dog123
1
2
3
4
5
6
7
8
9
替换目标option

前面出现的g,作用范围内行的所有查找目标,而不仅是第一个查找目标
# 替换全文每一行的每一个 cat 为 dog
sed ‘s/cat/dog/g‘ pet.txt
1
2
没有g,作用范围内所在行的第1个目标
# 替换全文每一行的第1个 cat 为 dog
sed ‘s/cat/dog/‘ pet.txt
1
2
不打印出全文,仅打印更改所涉及行,或者说仅打印受影响的行
在sed后面加 -n,是阻止默认的自动打印模式的选项,
同时在 替换目标option 的位置 写上 p,表明打印print。
# 打印发生替换的行
sed -n ‘s/cat/dog/gp‘ pet.txt
1
2
sed的y命令

不同于上面的s命令,以字符串或模式为单位替换为一个整体,y是罗列置换每个对应的字符。

语法

sed ‘y/查找的各个字符/对应替换后的各个字符/‘ 文件名
1
sed ‘y/abc/123’ test.txt ,这个命令会依次替换a,b,c为1,2,3 。
查找的各个字符与对应替换后的各个字符的长度要一致。

例,

$ echo ‘a,b,c,d,e‘|sed ‘y/abcde/12345/‘
1,2,3,4,5

$ cat test.txt
a,b,c
a,b,c
$ sed ‘y/abcde/12345/‘ test.txt
1,2,3
1,2,3
1
2
3
4
5
6
7
8
9
再比如 $ sed ‘1,5y/abcde/ABCDE/’ test.txt 是把1-5行内所有abcde转变为大写,但是,正则表达式元字符不能使用这个命令。
例,

$ cat copy.txt
wang yi
zhang san
li qi

# 想要把1-2行的小写转化为大写,正则表达式不可用
$ sed ‘1,2y/[a-z]/[A-Z]/‘ copy.txt
wAng yi
ZhAng sAn
li qi

# 罗列全部字母,来替换
$ sed ‘1,2y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/‘ copy.txt
WANG YI
ZHANG SAN
li qi

https://51.ruyo.net/?s=%E6%9D%8F%E5%BD%A9%E6%80%BB%E4%BB%A3Q%E3%80%9078100501%E3%80%91%E2%96%88%E2%96%88%E2%96%88/
————————————————
版权声明:本文为CSDN博主「Olivia_Vang」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/Olivia_Vang/article/details/104091358

原文地址:https://www.cnblogs.com/dasdfdfecvcx/p/12242998.html

时间: 2024-10-17 16:04:03

linux 给文件替换字符串/替换内容/替换某行 (shell,sed)的相关文章

No.32 将字符串进行内容替换

将字符串进行内容替换.注意:修改后变成新字符串,并不是将原字符串直接修改. String replace(oldChar,newChar); String replace(oldstring,newstring);

[Linux]搜索文件是否包含指定内容并返回文件名

在Linux系统中,find和grep都是很强大的命令,可以做很多很多事情,今天刚好有人问"如何查找哪些文件包含了特定字符串,并显示这些文件的名称". 第一种方法:使用grep,假设搜索所有的.cpp文件是否包含'open'字符串,如果包含了,则显示该文件,命令如下: grep -rl 'open' . --include=*.cpp 则执行结果如下: ./test/testall/file.cpp ./test/testall/shell_test.cpp ./test/daemon

Linux查找和替换目录下所有文件中字符串(转载)

转自:http://rubyer.me/blog/1613/ 单个文件中查找替换很简单,就不说了.文件夹下所有文件中字符串的查找替换就要记忆了,最近部署几十台linux服务器,记录下总结. 查找文件夹下包含字符串的文件 例:查找/usr/local目录下所有包含”rubyer.me”的文件. grep -lr 'rubyer.me' /usr/local/* vim替换单个文件中所有字符串方法 例:替换当前文件中所有old为new :%s/old/new/g #%表示替换说有行,g表示替换一行中

Linux中使用sed命令替换字符串小结

sed替换的基本语法为: sed 's/原字符串/替换字符串/' 单引号里面,s表示替换,三根斜线中间是替换的样式,特殊字符需要使用反斜线”\”进行转义,但是单引号”‘”是没有办法用反斜线”\”转义的,这时候只要把命令中的单引号改为双引号就行了,例如: sed "s/原字符串包含'/替换字符串包含'/" //要处理的字符包含单引号 命令中的三根斜线分隔符可以换成别的符号,这在要替换的内容有较多斜线是较为方便,只需要紧跟s定义即可,例如换成问号”?”: sed 's?原字符串?替换字符串

sql语句格式化数字(前面补0)、替换字符串

以下是详细分析: 1.select power(10,3)得到1000(即:10的3次方) 2.select cast(1000+33 as varchar) 将1000转换类型(即:将int转化成varchar类型) 3.select right(100033,3) 从右边取3个字符得到033 将1格式化同上 select right(cast(power(10,3) as varchar)+33,3) 替换字符串(aaa替换成bbb) update table set [column]=re

SQL Server中利用正则表达式替换字符串

原文:SQL Server中利用正则表达式替换字符串 建立正则替换函数,利用了OLE对象,以下是函数代码: --如果存在则删除原有函数 IF OBJECT_ID(N'dbo.RegexReplace') IS NOT NULL DROP FUNCTION dbo.RegexReplace GO --开始创建正则替换函数 CREATE FUNCTION dbo.RegexReplace ( @string VARCHAR(MAX), --被替换的字符串 @pattern VARCHAR(255),

取出文件中字符串内容

为了简化工作,避免手工操作,写了一个读取文件中字符串的小工具类 如果你想获取文件中字符串的内容(例如 XXX ="123" 得到 123)可以使用本工具 public static void main(String[] args) { new SubStringInFile().readAndWrite(); } /* * 读取文件,将字符串("abc"中abc)取出至文件 * 同行中去重 * */ public void readAndWrite(){ FileR

linux下文件搜索

常用: grep -nr "关键字" 搜索当前目录下所有匹配关键字的文件 grep -nr "关键字" *php  搜索当前目录下所有匹配关键字的php文件 find  -name '*.php'|xargs grep 'Hello!'    搜索当前目录下所有匹配关键字"Hello!"的php文件 替换文件内容 sed -i "s/原字符串/要替换的字符串/g" `grep "原字符串" -rl 路径`

linux sed 批量替换字符串

sed -i "s/zhangsan/lisi/g" `grep zhangsan -rl /modules` 解释一下: -i 表示inplace edit,就地修改文件-r 表示搜索子目录-l 表示输出匹配的文件名 这个命令组合很强大,要注意备份文件. (1)sed 'y/1234567890/ABCDEFGHIJ/' test_sedsed 'y/1234567890/ABCDEFGHIJ/' filenameABCDEFGHIJBCDEFGHIJACDEFGHIJABDEFGH