1
基本上有一個「模板」文件我想填充一些其他輔助文件的內容,它們基本上是一個矩陣的數字和字母。我做了其他替代品,但這是一件麻煩事。SED用bash替換變量,變量是存儲在數組中的另一個文件的內容
在模板文件中,我將「%label」放在我想要用輔助文件進行替換的地方。然後,我用這個腳本做替代:
for i in $(cat file_list.txt); do
array[$i]=$(<file_$i.txt)
done
for i in $(cat file_list.txt); do
sed -e "s/%label/${array[$i]}/g"<template.txt> final_file_$i.txt
done
(「file_list中」包含文件的名稱),但我不斷收到錯誤「的sed:-e表達式#3,焦炭58:未結束的'S'命令」。
我也試過這種腳本來做到這一點:
for i in $(cat file_list.txt); do
mapfile < file_$i.txt
array[$i]=${MAPFILE[@]}
done
for i in $(cat file_list.txt); do
sed -e "s/%label/${array[$i]}/g"<template.txt> final_file_$i.txt
done
在這種情況下,我沒有收到錯誤警告和替代而成,但不換行。
有沒有辦法讓替代保持斷行?
謝謝。
根本的問題是,無論'$ {數組[$ i]}'得到由殼擴大到受'sed'語法,這意味着如果在文件名中'file_list.txt'是包含斜線的路徑(因爲這是您在'sed'表達式中用作分隔符的地方),或者是從sed'的角度來看替換失敗的任何其他特殊字符。 –
謝謝你的回答,@AdrianFrühwirth。 我的文件名此刻不包含反斜槓。此外,當我使用「mapfile」時,我沒有得到任何錯誤。 雖然我嘗試將sed分隔符更改爲逗號,但我仍然收到相同的錯誤。 –