sed是一种非常强大的文本处理工具,用于对文本进行搜索、替换、删除等操作。下面是sed的一些基本用法:
替换字符串:使用s命令可以替换字符串,格式为s/old/new/g,其中old表示原来的字符串,new表示要替换成的新字符串,g表示全局替换。
$ sed 's/apple/orange/g' file.txt # 将文件中的所有"apple"替换成"orange"
如果需要直接修改文件,可以加上"-i"选项
删除行:使用d命令可以删除行,格式为d。
$ sed '3d' file.txt # 删除文件中的第3行
插入行:使用i命令可以插入行,格式为i\,其中\表示换行
$ sed '2i\This is a new line.' file.txt # 在文件的第2行之前插入一行新的文本
追加行:使用a命令可以追加行,格式为a\,其中\表示换行。
$ sed '2a\This is a new line.' file.txt # 在文件的第2行之后追加一行新的文本
执行多条命令:使用;可以在一行上执行多条命令。
$ sed '1d; s/apple/orange/g' file.txt # 删除文件的第1行,并将文件中的所有"apple"替换成"orange"
只替换第N个匹配项:在s命令中可以使用数字来指定要替换的匹配项。
$ sed 's/apple/orange/2' file.txt # 将文件中的第2个"apple"替换成"orange"
使用正则表达式:可以使用正则表达式来匹配文本。
$ sed '/apple/d' file.txt # 删除文件中所有包含"apple"的行
指定处理的行范围:可以使用行号或正则表达式来指定要处理的行范围。
$ sed '1,3s/apple/orange/g' file.txt # 将文件中第1到第3行的所有"apple"替换成"orange"
$ sed '/apple/,/orange/d' file.txt # 删除文件中包含"apple"和"orange"之间的所有行
使用正则表达式进行替换
$ sed 's/[0-9]\{5\}/&-0000/g' file.txt
这个命令会将文件中所有5位数字后面添加"-0000",例如"12345"会被替换成"12345-0000"。其中,"[0-9]{5}"表示5位数字,"&"表示匹配到的内容。
使用分组和反向引用进行替换
$ sed 's/\(.*\)old\(.*\)/\1new\2/g' file.txt
这个命令会将文件中所有包含"old"的字符串替换成"new",并保留"old"前后的内容。其中,".∗.∗"表示匹配任意字符,"\1"表示反向引用匹配到的第一个分组,"\2"表示反向引用匹配到的第二个分组。
删除文件中的空行
$ sed '/^$/d' file.txt
打印指定行
$ sed -n '2p' file.txt