【问题标题】:use of sed and perl to do the word processing, copying lines from one file to another使用 sed 和 perl 进行文字处理,将行从一个文件复制到另一个文件
【发布时间】:2012-02-09 15:06:14
【问题描述】:

我是 Linux 新手,任务艰巨。

我有3个数据文件,需要做以下事情:

  1. 转到文件 1 的第 31 行,将其删除
  2. 从文件 2 中读取 1 行并添加以代替已删除的行
  3. 转到文件 1 的第 97 行,将其删除,然后从文件 2 中读取第 1 行,并在文件 1 中添加代替已删除的行。

保持相同的文件也很重要,即 file ,不能更改。

我尝试了不同版本的sedperl,使用缓冲区复制技巧,但没有成功。

我愿意接受所有建议,并请专家给我建议。

【问题讨论】:

  • 如何删除和替换文件中的行但不更改文件?
  • stackoverflow.com/users/535275/scott-hunter 我的意思是说文件已被更改,但我不想获取新文件.. 就像在 sed 中使用 -i 选项一样
  • 感谢您回复我的帖子。我期待专家的一些建议。

标签: linux lines copying


【解决方案1】:

我在您的问题中找不到对第 3 个文件的引用,但如果您的意思是将文件 1 的第 31 行替换为文件 2 的第 1 行,并将文件 1 的第 97 行替换为文件 2 的第 2 行:

sed -i -e '30R f2
31d;96R f2
97d' f1

f2 之后的新行很重要,因此 sed 知道它是文件名的结尾。

请注意,R 命令是 GNU 扩展,它不是标准的。

【讨论】:

  • 维伦丹克。谢谢。 stackoverflow.com/users/851677/jfgagnegne。它现在对我来说很完美。我将在循环中使用它并不断更改以在我的模拟过程中不断更新文件。这是完美的。我不能投票,但我想:)
  • 我还有一个问题可以帮助我完成代码。如果我必须复制文件 2 的第 15 行并复制代替文件 1 的第 20 行,我将等待完成,最好的问候。
  • 如果您必须在file1的第20行复制file2的第15行,并且仍然必须在file1的第31行复制file2的第1行,我建议生成一个新的file2(让调用它是 nfile2),其第一行是 file2 的第 15 行,第二行是 file2 的第 1 行,并将上述脚本与 nfile2 一起使用。使用sed -n -e '1x;15{G;p}' file2 > nfile2'. If you also need line 2 of file2 at line 97 of file1, generate nfile2 with sed -n -e '1x;2H;15{G;p}' file2 > nfile2' 生成 nfile2 并不难。
  • 但是,如果您需要乱序替换行,awk 可能是更好的工具。您可以在 awk 脚本的 BEGIN 部​​分读取 file2,然后在读取时打印回 file1,并对要替换的行进行特殊处理。但是,awk 没有 -i 选项作为 sed。
  • stackoverflow.com/users/851677/jfgagne 谢谢你这么好的解释。它对我有用。最好的问候
猜你喜欢
  • 1970-01-01
  • 2013-04-23
  • 2014-03-21
  • 1970-01-01
  • 2010-11-02
  • 1970-01-01
  • 2014-02-24
  • 1970-01-01
  • 2014-01-26
相关资源
最近更新 更多