Warm tip: This article is reproduced from serverfault.com, please click

regex-查找子字符串并使用sed删除父子字符串

(regex - Find substring and delete parent substring using sed)

发布于 2020-11-27 21:56:40

我在使用sed时遇到问题,但似乎找不到解决方法。我需要找到一个子字符串,然后删除一个父子字符串。

这是我要实现的步骤:

  1. sourceMappingURL=在文件中查找
  2. 删除从到//# 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) 似乎也没有用。

Questioner
Charklewis
Viewed
0
Wiktor Stribiżew 2020-11-28 19:25:52

你可以使用

sed -i.bak '/^\/\/#[[:blank:]]*sourceMappingURL.*\.map$/d'
sed -i.bak 's,^//#[[:blank:]]*sourceMappingURL.*\.map,,'

第一个sed命令找到

  • ^ -字符串开始
  • \/\/#-一个//#字符串
  • [[:blank:]]* -零个或多个水平空白
  • sourceMappingURL -一个subtring
  • .* -包含以下内容的任何文本
  • \.map-.map位于...子字符串
  • $ -字符串结尾

d删除找到匹配项的行。

第二个命令仅删除同一行的内容,因为该操作是s用空字符串代替匹配(,正则表达式定界符用于避免/在LHS中匹配字符)。