基本的には「テンプレート」ファイルを持っています基本的には他の補助ファイルの内容数字と手紙の私は他の代用を行いますが、これは問題を起こすものです。配列に格納されている別のファイルの内容を変数とするbash置換のSED
テンプレートファイルでは、補助ファイルで置き換えたい場所に "%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、CHAR 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'-expressionで区切り文字として使用したものですから)。あるいは 'sed'の視点からの他の特殊文字が置換に失敗します。 –
お返事ありがとうございます、@AdrianFrühwirth。 現在、私のファイル名にバックスラッシュは含まれていません。また、私が "mapfile"を使用したとき、私は何のエラーも出なかった。 sedセパレータをカンマに変更しようとしましたが、同じエラーが発生しています。 –