【发布时间】:2013-01-14 09:11:47
【问题描述】:
我有一个结构如下的文件:
word1 word2 word3
word4 word5 word6
我使用命令
sed -i '1s/$/word7/' file
在第一行末尾添加单词“word7”
问题是这个词没有加在第一行的末尾,它是这样添加的:
word1 word2 word3
word7
word4 word5 word6
但是当我运行 'wc -l file' 命令时,我的文件的行数没有改变(它仍然是 2)!
我在想这可能是文件创建方式的问题,它是由具有这种语法的 C 程序创建的:
fprintf(file, "word1 word2 word3 \n");
我无法重新运行我的 C 程序,所以我应该运行什么 bash 命令来获取:
word1 word2 word3 word7
word4 word5 word6
?
【问题讨论】:
-
恕我直言,您错过了 word7 之前的空格。其余的按预期对我有用。请在结果上尝试
hexdump或od -xa。 -
我用空间试过了,还是不行。我如何准确地使用hexdex?其他“有趣”的事实:如果我手动打开我的文件,修改它并保存它,'wc -l 文件'给我 0 行!
-
@Sullivan Orlean:用于 hexdump 使用
hd -c file -
你也可以这样做:
cat -v file,这通常足以看到特殊字符(但有时可能还不够)。问题可能出在生成文件时:服务器 C 编译器的“\n”可能与您使用 sed 的机器上的“\n”不同。尝试查看每个服务器的LC_LANG值。 -
我不知道是谁删除了下面的答案,解决方案的所有信息都在哪里!我的问题是我的文件有 Windows 结束行字符,我可以使用命令“file myFile”看到这些字符。我所要做的就是一个“dos2unix myFile”命令让 sed 正常工作