在 shell 中工作时,我想获取文本文件(表)中“replace_me”的所有实例,并将其替换为另一个文件(标记)中的值,在列表中逐步进行。
即表中“replace_me”的第一个实例将被标记中的“replaced_1”替换,第二个实例将被“replaced_2”替换,直到列表耗尽为止。
查看其他答案,我认为它必须类似于嵌套循环(for,然后 if),沿着这些思路,但我不确定如何使其实际工作,并逐步向下移动“标记” ' 列表。
#!/bin/bash
fileReplace='markers'
fileChange='table'
linesreplace=`cat $fileReplace`
lineschange=`cat $fileChange`
for line in $lineschange ; do
if $linechange = "replace_me"
sed "s/{$lineschange}/{$linesreplace}/g"
else
done
我确信这是基本的,因此非常欢迎指向正确方向的指针或示例。
最佳答案
将下一个脚本保存到文件中,例如do_replace.sh
replace_me="replace_me"
while read replace_to
do
sed -i "" "1,/$replace_me/s/$replace_me/$replace_to/" $1
done
并运行它:
sh do_replace.sh file_where_need_replace.txt < file_with_replacements
例如来自 file_where_need_replace
aaa aaa aaa
replace_me bbb bbb
ccc ccc ccc
ddd replace_me ddd
eee eee eee
fff fff replace_me
具有以下替换内容:
111
222
333
将产生:
aaa aaa aaa
111 bbb bbb
ccc ccc ccc
ddd 222 ddd
eee eee eee
fff fff 333
或简单的 perl:
perl -ple 'BEGIN{@x=qx(cat replacements.txt);chomp @x}s/replace_me/shift(@x)/e' < where_to_replace.txt
关于bash - 使用循环将单个短语替换为列表中的不同短语,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11550731/