linux – Bash:在模式之后,将一个文件的内容插入另一个文件

前端之家收集整理的这篇文章主要介绍了linux – Bash:在模式之后,将一个文件的内容插入另一个文件前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在尝试写一个bash脚本,它将执行以下操作:

>从第一个文件读取内容(作为第一个参数)
>从第二个文件读取内容(作为第二个参数)
>使用给定模式找到第二个文件中的行(作为第三个参数)
>将文本从第一个文件插入到第二个文件的模式行之后.
>在屏幕上打印最终文件.

例如:

first_file.txt:

111111
1111
11
1@H_403_13@ 
 

second_file.txt:

122221
2222
22
2@H_403_13@ 
 

模式:

2222@H_403_13@ 
 

输出

122221
111111
1111
11
1
2222
111111
1111
11
1
22
2@H_403_13@ 
 

在BASH上实现此功能应该怎么用?

我写的代码,但它不能正常工作(为什么?):

#!/bin/bash

    first_filename="$1"
    second_filename="$2"
    pattern="$3"

    while read -r line
    do
    if [[ $line=˜$pattern ]]; then
            while read -r line2
            do
                    echo $line2
            done < $second_filename
    fi
    echo $line
    done < $first_filename@H_403_13@

解决方法

你需要在=〜操作符周围的空格.比较:
[[ foo=~bar ]]
[[ foo =~ bar ]]@H_403_13@ 
 

这是因为第一个表达式基本上评估为“这个字符串是否为空?

此外,OP代码使用small tilde而不是tilde.

即使如此,您也可以轻松摆脱内部循环.读取-r line2位与cat – “$second_filename”时,只需替换整个.

如果文件未以换行符(* nix工具标准)结尾,则最后一次echo $line是正确的.相反,您应该使用while -r行|| [[$line〜=”]].这可以使用或不带有换行符.

另外,Use More Quotes™.

原文链接:https://www.f2er.com/linux/393904.html

猜你在找的Linux相关文章