sed如何匹配行尾的$字符?

原因是我看到这行命令

sed 's/.*$//g'

只会留下空白行而不能把行删除.

这可能说明:

  1. 命令中的$仅仅代表行尾,而并不指行尾隐藏的'$'字符
  2. 这行命令不管替换内容是什么,必须保证一行文本最后有个隐藏的'$'字符

问题:

  1. 单纯论以上两点,我这么想有错吗?
  2. 以上两点哪一点是本题的答案?或者说有第3点?
阅读 12k
1 个回答

呃,'$'并不真的存在在行尾,它只是一个元字符,用来表示一行的结尾。它没有隐藏起来,因为它只是概念上的产物。
sed之所以不能把行删除,是因为sed是逐行读取的,一般情况下,它也是逐行处理的。

如果想用sed处理换行符,可以参考这个答案:
http://stackoverflow.com/questions/1251999/sed-how-can-i-replace-a-newline-n

如果想删除特定行,可以用sed 'n, md' file来删除。比如sed '1, $d' file能够删除从第一行到最后一行的内容。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进