我有500个* .INI文件的文件夹,需要手动编辑。在每个INI文件中,我都有行Source =
。我希望该行成为Source = C:\software\{filename}
。
例如,将需要修复dx4.ini文件,使其成为:Source = C:\software\dx4
是否可以使用Find,Grep或Sed函数快速执行此操作?
答案 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对双重转义序列并不感到困惑,那么我认为这会起作用。