命令 sed -e 's/\(~\).*\(~\)// 对文本文件执行什么操作?

命令 sed -e 's/\(~\).*\(~\)// 对文本文件执行什么操作?

命令 sed -e 's/\(~\).*\(~\)// 对文本文件执行什么操作?我不明白。我在工作中遇到过它。

答案1

该命令(如果在末尾添加缺少的单引号)会将文件的所有行打印到终端,但如果~任何行上至少有两个(波形符)字符,则第一个和最后一个之间的位~将通过s中的替换命令 ( )来删除sed

例子:

$ cat file
1 2 3 ~ 4
1~2~3
Here is ~ the last ~ line ~ THE END
$ sed -e 's/\(~\).*\(~\)//' file
1 2 3 ~ 4
13
Here is  THE END

\(不需要\)(因为表达式中没有使用反向引用),并且-e也可以省略 (因为只有一个表达式),因此该命令相当于

sed 's/~.*~//' file

所以,它不文件本身的任何内容,但它会读取并修改文件的内容,生成经过处理的文本,然后您可以使用重定向 ( sed ... >newfile) 将其保存在新文件中。


反向引用可以在此命令中使用,如下所示:

sed 's/\(~\).*\1//' file

即,匹配 a ~,然后匹配一些其他文本,然后匹配我们在第一组中匹配的相同内容\(...\)(波浪号)。但这并不能节省打字时间,也不能使命令更易于维护或理解,因此它不会对sed 's/~.*~//' file.

相关内容