与查看命令cat、tac、head、tail、more、less相当多一样,替换命令也比较多。一是这些操作比较频繁,二是命令方便易用,能解决问题。
本文将从几方面讨论替换命令。
一、文件名替换
在linux中对文件的后缀不敏感,有无后缀不影响读取与各项处量。但为了他人快速识别文件类型或所含代码,一般会加上一个识别性后缀,如文本文件加.txt,c语言文件加.c等等。
当我们需要对文件名或后缀进行调整时,一般会用到替换命令。处理文件名的替换命令比较多,常用的有mv、rename、sed、awk等。具体使用与介绍,可以看本人撰写的几篇小文《linux centos7中批量修改文件名》、《for循环批量处理文件名》和《awk批量修改文件名》。
二、变量替换
一定条件下,执行命令或脚本时,对${变量名}用变量值进行替换的过程。
一定条件,是指并不是所有${变量名} 都需要替换,强引用时,用单引号括起来的${变量名}就是本来字符意思,不需要变量替换。
name=zhang3
echo “${name}” # 变量替换
echo ‘${name}’ # 变量不替换
三、变量子串替换
变量名有时比较长、不方便使用,可以通过截取、删除和替换等操作,把变量名更改,更改后的变量名称为变量子串。
变量名替换,名称变了,但变量值不变。原变量名对应的值与变量子串的值一样,仍保持不变。
变量子串
格式:${变量}
主要的作用:变量子串的效率要比相应的命令执行的效率高
变量的长度 ${#变量}
变量子串替换
使用/代替第一个指定匹配的字符并替换
使用//代替所有匹配的指定字符串
四、字符串替换
各种高级语言都有替换命令,像python有专门的改变大小写命令、删除命令(一种特殊替换)。
Linux操作系统提供了强大的替换命令,可以用来在文本文件中查找并替换指定的字符串。这些命令可以帮助用户快速、高效地修改文件内容,提高工作效率。
1.小写改大写
a.tr
tr命令主要用于字符替换,最常用的是把多个空格转为单一空格
案例 cat –n abc.txt >ab.txt
行号与行内容之间是制表符分隔。没有用tr命令处理。
tr A-Z a-z #将单词中的大写字母转化为小写字母
可以用[:upper:] [:lower:] 代替 A-Z a-z来达到相同的效果
b.awk
awk 命令用 toupper 和 tolower 这两个选项完成大小写转换。下面用小案例展示一下
如果你需要把整个文档内容转换成大写,你可以用如下命令以大写的形式输出文件abc.txt的内容至屏幕上:
awk '{print toupper($0)}’ abc.txt
c.sed
sed 命令同样能够很好完成大小写转换的工作。
echo "We are study OS.so case " | sed 's/[a-z]/\U&/g' > abc
在sed替换中,第二个//之间的&,代表第一个//之间的字符串;\U表示转为大写
要想完成相反的转换,只需把上面那条命令中的 U 换成 L 、[a-z] 换成 [A-Z] 即可。
2.大写改小写
与小写改为大写相同,三个命令操作方法不再展示。
感兴趣的可以都试一下。重点是大小写的表示方法记住,并按要求变化一下。
3.首字母大写
在python中,有专用函数capital(),可以改变首字母大写。
在linux中,如果只让文本中各个单词的首字母大写,可以用sed命令完成:
echo “windows \& linux” | sed -e "s/\b\(.\)/\u\1/g"
上面这一条命令可以只让首字母大写而其他字母不变。
4.字符串一般性替换
从前面的大小写转换,可以看到sed命令和awk命令是替换操作的主要手段。
在对文件中的任意字符串替换中,也发挥着重要作用。
sed命令
sed命令对文件中任意字符串进行替换操作的基本语法如下:
sed 's/原字符串/新字符串/g' 文件名
其中,s表示替换操作,/原字符串/新字符串/用来指定要替换的原字符串和新字符串,g表示全局替换,即替换所有匹配到的字符串。
如果仅用s///格式,而没有g ,将替换每行首次出现的字符串。
案例:替换文件中的首次出现的"test"替换为"demo",可以使用以下命令:
sed 's/test/demo/' abc.txt
案例:将文件中的所有"test"替换为"demo",可以使用以下命令:
sed 's/ test/demo /g' abc.txt
awk命令
awk命令对文件中任意字符串进行替换的基本语法如下:
awk '{gsub(/原字符串/, "新字符串"); print}' 文件名
其中,gsub函数用来替换字符串,/原字符串/用来指定要替换的原字符串,"新字符串"表示新字符串。
awk '{sub(/原字符串/, "新字符串"); print}' 文件名
sub仅替换首次出现的字符串
案例:替换文件中的首次出现的"test"替换为"demo",可以使用以下命令:
awk '{sub(/test/, "demo"); print}' abc.txt
案例:将文件中的所有"test"替换为"demo",可以使用以下命令:
awk '{gsub(/test/, "demo"); print}' abc.txt
grep命令
grep命令是一个强大的文本搜索工具,可以用来查找包含指定字符串的行。然后结合sed命令来实现替换字符串操作。
find命令
find命令可以用来查找文件,结合xargs命令可以对查找出的所有文件进行字符串替换。这时仍然需要sed命令来替换字符串。