Sed和美元符号

时间:2015-07-12 17:29:52

标签: bash sed escaping

" Unix编程环境"声明' $'在sed中用于正则表达式意味着对我来说这很好,因为

cat file | sed 's/$/\n/'

被解释为"在每一行的末尾添加换行符"。

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

cat file | sed '$d'

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

3 个答案:

答案 0 :(得分:5)

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

答案 1 :(得分:4)

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

/regex/

例如:

sed '/foo/s/bar/bux/g' file

~regex~

例如:

sed 's~dd~s~' file

但不是'regex'。因此,$中的'$d'不会被sed视为正则表达式。 '$d'就像一个指出最后一行的地址。

答案 2 :(得分:4)

$命令中使用模式时,

s被视为正则表达式锚点。

s/$/\n

但是在$d中,$ 是一个正则表达式锚,它是地址表示法,表示输入的最后一行,使用d命令删除。

另请注意,您的上一个命令中不需要cat。它可以用作:

sed '$d' file