“Unix的编程环境”指出,在中美战略经济对话的手段则表达式中使用“$”结束的是为我好线,因为桑达和美元符号
cat file | sed 's/$/\n/'
被interpretted为“加每行结尾有换行符“。
出现的问题,当我尝试使用命令:
cat file | sed '$d'
不应该在该行删除每一行,而不是最后一个呢?在这种情况下,美元符号意味着最后一行的结束。我错了什么?
“Unix的编程环境”指出,在中美战略经济对话的手段则表达式中使用“$”结束的是为我好线,因为桑达和美元符号
cat file | sed 's/$/\n/'
被interpretted为“加每行结尾有换行符“。
出现的问题,当我尝试使用命令:
cat file | sed '$d'
不应该在该行删除每一行,而不是最后一个呢?在这种情况下,美元符号意味着最后一行的结束。我错了什么?
请注意,sed中的regex
必须位于引号以外的分隔符(;
,:
,~
等)中。
/regex/
例如:
sed '/foo/s/bar/bux/g' file
或
~regex~
例如:
sed 's~dd~s~' file
但不'regex'
。所以$
在'$d'
不会被认为是sed的正则表达式。 '$d'
的行为就像指出最后一行的地址。
在第二种用法中,没有正则表达式。 $
有一个地址,意思是最后一行。
$
在s
命令例如s
模式中使用时被视为正则表达式锚。
s/$/\n
然而在$d
,$
是不一个正则表达式锚,它是地址表示法是指输入,它是使用d
命令删除的最后一行。
另请注意,cat
在您的上一个命令中是不必要的。它可以用作:
sed '$d' file