Linux
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
您可以將替換為的字元串列表分配給數組
<>
。在一個名為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