Bash脚本迭代文件并替换字符串

时间:2016-12-27 17:52:33

标签: bash shell

我需要编写一个脚本文件,以递归方式迭代给定开始文件夹中的所有文件。

在每个文件中,它应该替换一个字符串。

文件如下所示

--recursive

每个文件的FOO和BAR都不同,但是我想用value1的字符串(在这种情况下为FOO)替换value2的字符串(在本例中为BAR)。

2 个答案:

答案 0 :(得分:1)

这样的东西有效!使用GNU grep标识搜索模式,使用perl进行就地替换。

#!/bin/bash

while IFS='' read -r -d '' filename
do
    value1=$(grep -oP '(?<=value1=\s").*(?=")' "$filename")
    value2=$(grep -oP '(?<=value2=\s").*(?=")' "$filename")
    perl -pi.bak -e "s/\( value1= ".*"\)/(\ value1= \"$value2\"\)/;" -e "s/\( value2= ".*"\)/(\ value1= \"$value1\"\)/" "$filename"        
done < <(find . -maxdepth 1 -type f -print0)

删除-i.bak一次以查看替换文件是否在stdout中正确显示,确认后再添加标记。

答案 1 :(得分:-1)

使用sed -re'/ s /你想要替换/替换/ g'文件