使用SED将数据添加到文本文件而不更改文件大小

时间:2015-01-08 18:02:49

标签: sed

我有一些文本文件,我需要在文件的每一行的开头添加1个字符。 在Windows中,我发现快速执行此操作的方法是安装Cygwin并使用以下命令,该命令将字母N添加到文件的每一行:

$ sed 's/^/N/' inputFile.txt > outputFile.txt

我发现奇怪的是,在我在每行的前面添加一个新字符后,文件大小几乎完全没有变化。我进一步测试了这一点,看看我是否可以通过以下步骤重新创建问题:

  1. 创建了一个名为" Test.txt"的文本文件,其中有10,000行,其中包含" TEST"在每一行。
  2. 创建一个名为" TestWithNPrefix.txt"的文本文件。其中有10,000行代表#34; NTEST"在每一行。
  3. 执行以下命令创建另一个文件,该文件有10,000行" NTEST"

    $ sed 's/^/N/' Test.txt > "SEDTest.txt"    
    
  4. 结果

    "试验"和" SEDTest"几乎完全相同的大小,而#34; TestWithNPrefix"大了10KB。

    Test = 59,998 Bytes;  SEDTest = 59,999 Bytes;  TestWithNPrefix = 69,998 Bytes
    

    当我跑出" fc"在命令提示符中的命令,它返回" SEDTest"之间没有差异。和" TestWithNPrefix"。 " FC"介于" SEDTest"和"测试"返回" Resync Filed。文件太不同了#34;

    有人可以帮我理解造成这些文件大小差异的原因吗?

    编辑:我创建了文件" Test.txt"和" TestWithNPrefix.txt"在UltraEdit中。我只输入了" TEST" /" NTEST",然后复制并粘贴了10,000次。

1 个答案:

答案 0 :(得分:2)

不是答案,而是格式化评论:

你似乎遇到了DOS与Unix行结尾的奇怪情况。我不得不问:你是如何创建文件的?我希望10,000行“TEST \ r \ n”的大小正好是60,000字节,而不是59,999

在Linux上(目前我无法访问cygwin环境):'

$ yes $'TEST\r' | head -n 10000 > Test
$ ll Test
-rw-r--r-- 1 jackman jackman 60000 Jan  8 13:06 Test
$ sed 's/^/N/' Test > SEDTest
$ ll *Test
-rw-r--r-- 1 jackman jackman 70000 Jan  8 13:06 SEDTest
-rw-r--r-- 1 jackman jackman 60000 Jan  8 13:06 Test