sed は中間文字列を置き換えます。

sed は中間文字列を置き換えます。

この文字列があります

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

おすすめ記事