如何使用Find / Grep / Sed查找和替换文件中的字符串

时间:2020-07-26 09:51:21

标签: sed grep find

我有500个* .INI文件的文件夹,需要手动编辑。在每个INI文件中,我都有行Source =。我希望该行成为Source = C:\software\{filename}

例如,将需要修复dx4.ini文件,使其成为:Source = C:\software\dx4

是否可以使用Find,Grep或Sed函数快速执行此操作?

4 个答案:

答案 0 :(得分:0)

您可以尝试使用sed 例如

输入文件内容: file.txt

Source =
some lines..

脚本:

newstring='Source = C:\software\dx4'
oldstring='Source ='
echo `sed "s/$oldstring/$newstring/g" file.txt` > file.txt

运行以上命令后 输出:

Source = C:\software\dx4
some lines..

答案 1 :(得分:0)

如果您想修改文件到脚本中,我认为ed是您的最佳选择。结合外壳程序for循环:

for file in *.INI; do
    base=$(basename "$file" .INI)
    ed -s "$file" <<EOF
/^Source =/s/=/= C:\\\\software\\\\$base/
w
EOF
done

(这确实假设文件名的名称中不会包含换行符或&符)

答案 2 :(得分:0)

使用GNU awk将第三个参数匹配(),gensub()和“就地”编辑:

awk -i inplace '
    match($0,/(.*Source = C:\\software\\){filename}(.*)/,a) {
        fname = gensub(/\..*/,"",1,FILENAME)
        $0 = a[1] fname a[2]
    }
1' *.INI

以上假设您使用folder而不是directory来运行UNIX环境,并且以C:开头并包含反斜杠的路径使我感到怀疑。如果您使用的是Windows,则将2个'之间的部分(不包括)保存在名为foo.awk的文件中,并以awk -i inplace foo.awk *.INI的身份执行,或者通常是像这样执行命令在Windows中。

答案 3 :(得分:0)

find *.ini -type -f > stack

while read line 
do
sed -i s"@Source =@Source = C:\\software\\dx4@" "${line}"
done < stack

假设a}您使用“ -i”(插入标志,AFAIK并不总是可移植的)进行sed,而b} sed对双重转义序列并不感到困惑,那么我认为这会起作用。

相关问题