sed使用简单的正则表达式检查将整行替换为字符串
我正在使用cordova为android构建应用程序,但无法在AndroidManifest.xml文件中设置android:minSdkVersion 因此,我决定在每次使用我编写的脚本开始构建应用程序时修改此文件 我想换一行:sed使用简单的正则表达式检查将整行替换为字符串,sed,Sed,我正在使用cordova为android构建应用程序,但无法在AndroidManifest.xml文件中设置android:minSdkVersion 因此,我决定在每次使用我编写的脚本开始构建应用程序时修改此文件 我想换一行: <uses-sdk android:minSdkVersion="10" android:targetSdkVersion="19" /> 但它仍然给我的使用sdk行不变 我的regexp有什么问题?三件事: 您需要通过将(.*)替换为\(.*)来修改组
<uses-sdk android:minSdkVersion="10" android:targetSdkVersion="19" />
但它仍然给我的使用sdk行不变
我的regexp有什么问题?三件事:
(.*)
替换为\(.*)
来修改组sed's/minSdkVersion=“[0-9]+”/minSdkVersion=“14”/g'AndroidManifest.xml
如果要修改文件,请使用
-i
更改文件。正则表达式有两个问题
sed
方言解释为文字括号。不管怎么说,它们都是无用的,所以你不需要修复它们——只需移除它们*
是贪婪的,将匹配到上一个双引号之前sed 's/minSdkVersion="[^"]*"/minSdkVersion="14"/g' AndroidManifest.xml
请注意,
sed'…'文件
将输出命令的结果。如果要更新文件,请使用sed-i.bak'…'文件
file
将包含新内容,而file.bak
将包含一个备份。它与Ubuntu中的gnu sed一起工作,您使用什么?@NovumCoder correct,+
是ERE元字符,sed默认使用BRE。您需要提供一个参数来激活ERE(例如,-r
或显然是-e
),或者在某些sed中,只需在+
前面加一个反斜杠,就可以告诉sed将其用作ERE元字符,而不是文字加号。
sed 's/minSdkVersion="(.*)"/minSdkVersion="14"/g' AndroidManifest.xml
sed 's/minSdkVersion="[^"]*"/minSdkVersion="14"/g' AndroidManifest.xml