我正在try 将文件的一部分复制到特定位置的另一个文件中.

我不能使用sed -i '/match/r fileToInsert' file,因为我只想插入fileTo Insert的部分内容,而不是整个文件.

我的fileTo Insert如下:

 <?xml version="1.0" encoding="ISO-8859-1"?>                                                                                                                                                  
 <!-- OriginalName: test.xml -->                                                                                                                                                        
 <ListModes>
 ...

我试过这个:

sed -i "/match/a$(sed -n '2,3p' fileToInsert)" file

但它也不起作用,因为fileToInsert是一个XML文件,当遇到开头的"&lt;"时,sed在第二行阻塞:

sed -e expression #1, char 59: unknown command: `<'

(不过,如果我只用一行就可以了).

有没有办法在Linux上实现我想要的?可以与sed、awk或Redhat发行版上的任何其他现有实用程序一起使用.

推荐答案

awk可以在一条命令中完全做到这一点:

awk '
FNR == NR {
   if (FNR >= 2 && FNR <= 3)
      s = s $0 ORS
   next
}
1
/match/ {
   printf "%s", s
}' fileToInsert file

显示find + awk个解决方案,如下所述:

cat ins.awk

FNR == NR {
   if (FNR >= 2 && FNR <= 3)
      s = s $0 ORS
   next
}
1
/match/ {
   printf "%s", s
}

以下列方式运行:

find . -type f -exec awk -f ins.awk fileToInsert {} \;

Linux相关问答推荐

awk:try 将时间戳字符串转换为unix纪元时间

Bash:将带有新行的字符串转换为带有逗号、内联的唯一值的字符串

如何在 ERE 中结束这个正则表达式

仅查找并保留有效邮箱并删除无效记录,AWK

如何添加Linux格式的时间输出

在 Rust 中重命名主线程

如何在充满 csv 的目录中获得不同的值计数

在服务器目录之外启动 DolphinDB 服务器时出错

命令应在终端关闭后继续运行

如何让 Flutter 用鼠标拖动而不是滚轮滚动? (Linux)

判断指定名称的画面是否存在

在 Linux 下将 TCP 流量重定向到 UNIX 域套接字

为什么 Linux (x86) 的页面大小是 4 KB,这是如何计算的?

如何排除 tar 的绝对路径?

什么是最有效的不区分大小写的 grep 用法?

Vagrant chicken-and-egg:与 uid = apache 用户共享文件夹

size_t 和 off_t 的用法有什么区别?

命令行 Arduino 编译和上传?

在linux上上几个目录

在 Docker 容器中运行的 JVM 的驻留集大小 (RSS) 和 Java 总提交内存 (NMT) 之间的差异