簡體   English   中英

sed用多行文件或變量替換行

[英]sed replace line with multiline file or variable

我正在從文件中檢索一節,並希望用此多行數據替換另一個文件中的行。 目前,我正在輸出到文件,但希望使用變量。

例如

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"

我知道目前可以刪除該行,但是我覺得其他人可能也想知道這一點,所以我沒有找到一個好的解決方案。

在這里找到解決方案

使用GNU sed:

在包含查找的文件file.csv中查找行,追加文件newline.txt的內容(r),並刪除(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

從變量而不是文件中提取:

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

請注意,我們使用雙引號而不是單引號。 但隨着發現這里有一個問題,如果你有$ OUTPUT內部特殊字符(\\,與和/)。 找不到適合的解決方案,因此我將保留該文件的解決方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM