原因是我看到这行命令
sed 's/.*$//g'
只会留下空白行而不能把行删除.
这可能说明:
- 命令中的$仅仅代表行尾,而并不指行尾隐藏的'$'字符
- 这行命令不管替换内容是什么,必须保证一行文本最后有个隐藏的'$'字符
问题:
-
单纯
论以上两点,我这么想有错吗? - 以上两点哪一点是本题的答案?或者说有第3点?
呃,'$'并不真的存在在行尾,它只是一个元字符,用来表示一行的结尾。它没有隐藏起来,因为它只是概念上的产物。sed
之所以不能把行删除,是因为sed
是逐行读取的,一般情况下,它也是逐行处理的。
如果想用sed
处理换行符,可以参考这个答案:
http://stackoverflow.com/questions/1251999/sed-how-can-i-replace-a-newline-n
如果想删除特定行,可以用sed 'n, md' file
来删除。比如sed '1, $d' file
能够删除从第一行到最后一行的内容。