我在使用sed时遇到问题,但似乎找不到解决方法。我需要找到一个子字符串,然后删除一个父子字符串。
这是我要实现的步骤:
sourceMappingURL=
在文件中查找//# sourceMappingURL
结束的父子字符串.map
这是我期望的示例输入和输出:
输入
!function(e){var n={};function t(i){if(n[i])return n[i].exports; //more code
//# sourceMappingURL=bundle.js.map
输出
!function(e){var n={};function t(i){if(n[i])return n[i].exports; //more code
我这样做而不是删除包含子字符串的行的原因是,由于某种原因,对于某些js文件,它不仅删除了该行,还删除了上面的那一行。
我的删除带有子字符串的行的命令如下所示:
find my_folder -type f -name "*.js" | xargs sed -i.bak '/sourceMappingURL=/d'
我对regex不太满意,并尝试了以下方法,但没有用(\/\/\# sourceMappingURL){1}(\w.*)(\.map){1}
,(\/\/#)(\w.*)(map)
似乎也没有用。
你可以使用
sed -i.bak '/^\/\/#[[:blank:]]*sourceMappingURL.*\.map$/d'
sed -i.bak 's,^//#[[:blank:]]*sourceMappingURL.*\.map,,'
第一个sed
命令找到
^
-字符串开始\/\/#
-一个//#
字符串[[:blank:]]*
-零个或多个水平空白sourceMappingURL
-一个subtring.*
-包含以下内容的任何文本\.map
-.map
位于...的子字符串$
-字符串结尾并d
删除找到匹配项的行。
第二个命令仅删除同一行的内容,因为该操作是s
用空字符串来代替匹配(,
正则表达式定界符用于避免/
在LHS中匹配字符)。