この文字列があります
22<>22
このリストがあります。
test
dev
too
出力は次のようにする必要があります
22test22
22dev22
etc..
これを行うために使用するコマンドは次のとおりです。
cat list | sed 's/$/22/g' | sed 's/^/22/g'
編集する
これを行うために使用するコマンド
cat list | sed 's/$/22/' | sed 's/^/22/'
しかし、リストが多すぎて役に立ちません。
22<>22
3<>33
134423<>4
ベストアンサー1
置換する文字列のリストを配列に割り当てることができます<>
。というファイルには以下がlist.txt
必要です。
test
dev
too
というファイルには以下がdata.txt
必要です。
22<>22
3<>33
134423<>4
解決策1:
ファイルを読み取り、list.txt
その内容を配列に割り当てます。
Bashを使用して配列を読み取る
export IFS=$'\n'
readarray array < list.txt
zshを使用して配列を読み取る
array=("${(@f)"$(<list.txt)"}")
最後に、変数を繰り返してarray
リストの各要素を取得し、次に置き換える必要がありますsed
。
for i in ${array[@]}; do
sed "s/<>/$i/g" data.txt
done
メモ:for ループは、端末の標準出力としてテキストを印刷します。ただし、出力をファイルにリダイレクトするには、>
afterdone
キーワードを使用できます。
for i in ${array[@]}; do
sed "s/<>/$i/g" data.txt
done > final.txt
このソリューションは、次の出力を生成します。
22test22
3test33
134423test4
22dev22
3dev33
134423dev4
22too22
3too33
134423too4
解決策2:
まず、ファイルを読み取り、list.txt
その内容を配列に割り当てる必要があります。
Bashを使用して配列を読み取る
export IFS=$'\n'
readarray array < list.txt
zshを使用して配列を読み取る
array=("${(@f)"$(<list.txt)"}")
その後、ファイル内の各行を繰り返す必要があり、data.txt
そのループ内で配列内の各項目を読み取ってsed
コマンドを適用する必要があります。
while read line ; do
for i in ${array[@]}; do
sed "s/<>/$i/g" <<< "$line"
done
done < data.txt
または、標準出力をファイルにリダイレクトします。
while read line ; do
for i in ${array[@]}; do
sed "s/<>/$i/g" <<< "$line"
done
done < data.txt > final.txt
このソリューションは、次の出力を生成します。
22test22
22dev22
22too22
3test33
3dev33
3too33
134423test4
134423dev4
134423too4