我试图写一个bash脚本来改变一个xml文件名和内容在这个XML文件超过500个不同的文件夹。
我更喜欢使用bash脚本的sed
命令来执行此过程,而不是使用xmlstarlet
,因为我不想在此VM上安装它。这个目录有点烦人,因为xml文件和以前的目录同名。
下面是要修改的文件的示例:
/var/opt/FTPserver/users/MainUsers/junk/VFS/junk.xml
^^^^ ^^^^
junk.xml
包含一行:
<url>file://home/FTPserver/Customer/junk/</url>
^^^^
我想将文件重命名为以下内容:
/var/opt/FTPserver/users/MainUsers/junk/VFS/treasure.xml
^^^^ ^^^^^^^^
junk.xml
包含修改后的行:
<url>file://home/FTPserver/Customer/treasure/</url>
^^^^^^^^
customerlogin.csv
是逗号分隔的,列A = junk
,列B = treasure
作为我的测试示例。
while IFS=, read -r orig new; do
find "/var/opt/FTPserver/users/MainUsers/"$orig"/VFS/" -name "$orig" -execdir mv -n -- {} "$new" \;
sed -i 's#/"$org"#$new"#' "$new".xml
done < customerlogin.csv
我对bash和脚本是新手。我希望我不能像上面那样引用.xml文件,并且当我运行脚本时什么也没有发生。
1条答案
按热度按时间nafvub8i1#
至少可以把这个作为一个起点:
这假设你的
oldStr
和newStr
字符串不包含regexp元字符或反向引用元字符,参见Is it possible to escape regex metacharacters reliably with sed,并且oldStr
只出现在你想要在文件中修改它的位置。