Bash 美元符号

Bash 美元符号,bash,sed,escaping,Bash,Sed,Escaping,“Unix编程环境”指出,sed中正则表达式中使用的“$”表示行结束,这对我来说很好,因为 cat file | sed 's/$/\n/' 解释为“在每行末尾添加换行符” 当我尝试使用命令时,问题出现了: cat file | sed '$d' 这一行不应该删除每一行而不是最后一行吗?在此上下文中,美元符号表示最后一行的结束。我错了什么?请注意,sed中的regex必须位于分隔符(;,:,~等)内,而不是引号 /regex/ 例: 或 例: 但不是'regex'。因此,sed不会将'$d

“Unix编程环境”指出,sed中正则表达式中使用的“$”表示行结束,这对我来说很好,因为

cat file | sed 's/$/\n/'
解释为“在每行末尾添加换行符”

当我尝试使用命令时,问题出现了:

cat file | sed '$d'

这一行不应该删除每一行而不是最后一行吗?在此上下文中,美元符号表示最后一行的结束。我错了什么?

请注意,sed中的
regex
必须位于分隔符(
~
等)内,而不是引号

/regex/
例:

例:


但不是
'regex'
。因此,sed不会将
'$d'
中的
$
视为正则表达式<代码>“$d”的作用类似于指出最后一行的地址。

请注意,sed中的
regex
必须位于除引号以外的分隔符(
~
等)内

/regex/
例:

例:


但不是
'regex'
。因此,sed不会将
'$d'
中的
$
视为正则表达式<代码>'$d'的作用类似于指出最后一行的地址。

在第二种用法中,没有正则表达式。
$
有一个地址,表示最后一行。

在第二种用法中,没有正则表达式。
$
有一个地址,表示最后一行。

$
s
命令的模式中使用时,将被视为正则表达式锚

s/$/\n
然而,在
$d
中,
$
不是regex锚,它是地址符号,表示输入的最后一行,使用
d
命令将其删除

还要注意的是,
cat
在上一个命令中是不必要的。它可以用作:

sed '$d' file

$
s
命令的模式中使用时,被视为正则表达式锚

s/$/\n
然而,在
$d
中,
$
不是regex锚,它是地址符号,表示输入的最后一行,使用
d
命令将其删除

还要注意的是,
cat
在上一个命令中是不必要的。它可以用作:

sed '$d' file