【问题标题】:sed replace line with multiline file or variablesed 用多行文件或变量替换行
【发布时间】:2019-03-24 14:18:49
【问题描述】:

我正在从一个文件中检索一个部分,并想用这个多行数据替换另一个文件中的一行。目前我正在输出到一个文件,但更喜欢使用一个变量。

例如

R 0x00007d04 0x70040000

[OVERWRITE_1]

C "- Starting Execution"

变成:

R 0x00007d04 0x70040000

W 0x00001118 0x0d1f4e3a
W 0x0000111c 0xa3795ac8 
W 0x00001120 0xc50e69d5

C "- Starting Execution"

这是我所拥有的:

START="R 0x00007fd0 0x00000000            # CSR:014 (CSRCID-OPT2)"
END="W 0x00007f80"
FILE=file.txt

#Retrieve text between sections above to variable
OUTPUT=$(sed -n "/^$START$/,/$END/ { /^$START$/d ; /$END/d ; /^$/d ; p }" 
$FILE)

echo "$OUTPUT" > tmp.txt

#This line currently appends after [OVERWRITE_1]
sed '/\[OVERWRITE_1\]/r tmp.txt' test.asm

哪个输出这个:

R 0x00007d04 0x70040000

[OVERWRITE_1]
W 0x00001118 0x0d1f4e3a
W 0x0000111c 0xa3795ac8 
W 0x00001120 0xc50e69d5

C "- Starting Execution"

我知道此时我可以删除该行,但我觉得其他人可能也想知道这一点,我还没有找到好的解决方案。

【问题讨论】:

    标签: linux bash sed text-processing


    【解决方案1】:

    找到解决方案here

    使用 GNU sed:

    在文件 file.csv 中查找包含查找、附加内容 (r) 的行 文件 newline.txt 并删除包含 find 的 (d) 行

    START="R 0x00007fd0 0x00000000            # CSR:014 (CSRCID-OPT2)"
    END="W 0x00007f80"
    FILE=file.txt
    
    #Retrieve text between sections above to variable
    OUTPUT=$(sed -n "/^$START$/,/$END/ { /^$START$/d ; /$END/d ; /^$/d ; p }" 
    $FILE)
    
    echo "$OUTPUT" > tmp.txt
    
    sed -e '/\[OVERWRITE_1\]/{r tmp.txt' -e 'd}' test.asm
    

    Sed 从变量而不是文件:

    START="R 0x00007fd0 0x00000000            # CSR:014 (CSRCID-OPT2)"
    END="W 0x00007f80"
    FILE=file.txt
    
    #Retrieve text between sections above to variable
    OUTPUT=$(sed -n "/^$START$/,/$END/ { /^$START$/d ; /$END/d ; /^$/d ; p }" 
    $FILE)
    
    echo "$OUTPUT" > tmp.txt
    
    sed  "s/\[OVERWRITE_1\]/$OUTPUT/" test.asm
    

    请注意,我们使用双引号而不是单引号。 但是正如here 所发现的,如果您在 $OUTPUT(\、& 和 /)中有特殊字符,则会出现问题。没有找到一个好的解决方案,所以我会保留该文件的解决方法。

    【讨论】:

      猜你喜欢
      • 2014-11-20
      • 1970-01-01
      • 2011-10-04
      • 2011-01-23
      • 1970-01-01
      • 2020-02-27
      • 2011-02-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多