2015-07-12 84 views
1

“Unix的编程环境”指出,在中美战略经济对话的手段则表达式中使用“$”结束的是为我好线,因为桑达和美元符号

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

被interpretted为“加每行结尾有换行符“。

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

cat file | sed '$d' 

不应该在该行删除每一行,而不是最后一个呢?在这种情况下,美元符号意味着最后一行的结束。我错了什么?

回答

4

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

/regex/ 

例如:

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

~regex~ 

例如:

sed 's~dd~s~' file 

但不'regex'。所以$'$d'不会被认为是sed的正则表达式。 '$d'的行为就像指出最后一行的地址。

5

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

4

$s命令例如s模式中使用时被视为正则表达式锚。

s/$/\n 

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

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

sed '$d' file