【问题标题】:How to insert the content of a file into another file (if regexp) in perl/shell如何在 perl/shell 中将文件的内容插入另一个文件(如果是正则表达式)
【发布时间】:2012-03-17 15:06:06
【问题描述】:
File1 Contents:

line1-file1      "1" 
line2-file1      "2"
line3-file1      "3" 
line4-file1      "4" 

File2 Contents:

line1-file2     "25"  
line2-file2     "24"  
Pointer-file2   "23"  
line4-file2     "22" 
line5-file2     "21"

perl/shell脚本执行后,

File 2 content should become

line1-file2     "25"  
line2-file2     "24"  
Pointer-file2   "23" 
line1-file1      "1" 
line2-file1      "2"
line3-file1      "3" 
line4-file1      "4"  
line4-file2     "22" 
line5-file2     "21"

即在包含“指针”的行之后将文件 1 的内容粘贴到文件 2 中。

谢谢

【问题讨论】:

标签: regex perl shell insert paste


【解决方案1】:

使用sed中的r命令追加文本文件:

$ sed -i '/Pointer-file2/r file1' file2

$ cat file2
line1-file2     "25"
line2-file2     "24"
Pointer-file2   "23"
line1-file1      "1"
line2-file1      "2"
line3-file1      "3"
line4-file1      "4"
line4-file2     "22"
line5-file2     "21"

使用ed中的r命令插入文本文件:

$ echo -e '/Pointer/-1r file1\n%w' | ed -s file2

$ cat file2
line1-file2     "25"
line2-file2     "24"
line1-file1      "1"
line2-file1      "2"
line3-file1      "3"
line4-file1      "4"
Pointer-file2   "23"
line4-file2     "22"
line5-file2     "21"

【讨论】:

  • 先生,如果我们想在包含行的“指针”之前粘贴,该怎么做
  • @user1228191 其实是r,斜线属于/pattern/
  • 是的,kev,那是一个拼写错误!是否有类似 r 的命令将其粘贴到包含行pointer 之前
  • 如何修改这一点,以便在 file2 中每次出现指针之前插入文件?
【解决方案2】:

我会use Tie::File。大概,

use Tie::File;
tie my @a, 'Tie::File', 'File2' or die;
tie my @b, 'Tie::File', 'File1' or die;
for (0..$#a) {
  if (/^Pointer-file2/) {
    splice @a, $_, 0, @b;
    last
  }
}

它比 sed 的使用要长,但它也应该更容易看出您将如何针对稍微不同的任务进行更改。

【讨论】:

    猜你喜欢
    • 2012-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-23
    • 2023-01-31
    • 1970-01-01
    • 2017-11-24
    • 1970-01-01
    相关资源
    最近更新 更多