$ cat file.txt
one
two
three
$ cat file.txt | sed "s/one/1/"
1
two
“三”这个词在哪里?
更新: “三”字后面没有任何一行。
答案 0 :(得分:4)
正如Ivan建议的那样,你的文本文件缺少最后一行的行尾(EOL)标记。由于不存在,three
由sed打印出来,然后立即被提示覆盖。如果您强制打印额外的行,则可以看到它。
sed 's/one/1/' file.txt && echo
这是一个常见的问题,因为人们错误地认为EOL表示存在以下行(这就是为什么它通常被称为“换行符”)并且不表示当前行已经结束。
答案 1 :(得分:2)
使用其他帖子的评论:
然后,要解决问题,您可以重新命令命令:
( cat file.txt && echo ) | sed 's/one/1/'
答案 2 :(得分:1)
我猜最后一行后面没有新行字符。 sed
在最后一行后找不到行分隔符并忽略它。
<强>更新强>
我建议你在perl中重写它(如果你安装了它):
cat file.txt | perl -pe 's/one/1/'
答案 3 :(得分:1)
谷歌搜索显示某些版本的sed(不是GNU或BSD版本,其工作正如您所期望的)的手册页表明它不会处理不完整的行(不是换行终止的行)在文件的末尾。解决方案是确保您的文件以换行符结束,安装GNU sed或使用awk或perl。
答案 4 :(得分:0)
在替换字符串之后运行带有文件名作为参数的sed,而不是将文件和管道连接到sed,如下所示:
sed "s/one/1/" file.txt
当我这样做时,我立即得到了“三个”提示符:
1
two
three$
答案 5 :(得分:0)
这是一个awk解决方案
awk '{gsub("one","1")}1' file.txt