首页 > 解决方案 > 这个 BASH SED 命令是什么意思?

问题描述

tnum 示例 ... HYH19986_T_DRIVER_BAG_PRESSURE__78ms_546ms

tnum=`echo $1 | sed -e 's/_.*$//'`

最终的结果是 tnum 最终会变成 HYH19986。我完全没有 BASH 的经验,但快速搜索发现 SED 是流编辑器,本质上也是一个查找替换。

请问有人可以向我解释从-e 开始的所有内容吗?谢谢你。

标签: bash

解决方案


Sed 是“流编辑器”。它是一个非交互式文本编辑器,需要命令来编辑文本。它最常用的命令是“s”,是“substitute”的缩写。这需要两个表达式和一些可选的选项,并用第二个表达式替换第一个表达式。

“s”之后的字符是分隔符 - 它分隔表达式。通常这是“/”,但如果你正在使用路径,那么使用不同的东西可能会更好,:或者_你不需要转义每个/.

是一个正_.*$则表达式。Sed 匹配这个,并用第二个表达式替换它,第二个和第三个斜杠之间的位,即在这种情况下什么都没有。

_是文字下划线,.*是“任意数量的字符”并且$是行尾。

在第三个斜线之后,您还可以提供选项,例如“g”(我记得它是“global”),这将导致每行运行多次。那是缺失的,但在这种情况下,表达式无论如何都匹配到行尾,所以什么都不会改变。

因此,这会在下划线之后用任何内容替换任何内容,从而导致对其进行修剪。


推荐阅读