" Unix编程环境"声明' $'在sed中用于正则表达式意味着对我来说这很好,因为
cat file | sed 's/$/\n/'
被解释为"在每一行的末尾添加换行符"。
问题出现了,当我尝试使用命令时:
cat file | sed '$d'
这行不应该删除每一行而不是最后一行吗?在此上下文中,美元符号表示最后一行的结尾。我错了什么?
答案 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