sed-搜索和替换总是将捕获组放在末尾
我正在重构大量文件中的一些代码,并尝试在Mac上使用sed-搜索和替换总是将捕获组放在末尾,sed,xargs,ag,Sed,Xargs,Ag,我正在重构大量文件中的一些代码,并尝试在Mac上使用sed进行搜索和替换 我们的目标是: fooActions:fooActionCreators的类型 为此: fooActions:Partial 我用这个sed表达式使它大部分工作: ag-l“Actions:typeof”| xargs sed-i“-e”s/Actions:typeof\(\w*\)/Actions:Partial/g“ 基本上是使用ag查找包含匹配字符串的文件名列表,然后使用xargs将这些文件名作为输入传递到mysed
sed
进行搜索和替换
我们的目标是:
fooActions:fooActionCreators的类型
为此:
fooActions:Partial
我用这个sed表达式使它大部分工作:
ag-l“Actions:typeof”| xargs sed-i“-e”s/Actions:typeof\(\w*\)/Actions:Partial/g“
基本上是使用ag
查找包含匹配字符串的文件名列表,然后使用xargs
将这些文件名作为输入传递到mysed
表达式
我得到的输出如下所示:
fooActions:PartialfooActionCreators
我不明白为什么我的捕获组被放在then end而不是replace子句中的位置。mac附带的sed不支持单词字符的
\w
如果您有gsed(gnu sed),这应该可以按预期工作
$ echo 'Actions: typeof foo' | gsed -e "s/Actions: typeof \(\w*\)/Actions: Partial<typeof \1>/g"
Actions: Partial<typeof foo>
您看到的看似奇怪的行为是因为在纯sed版本中,\w*
与您希望匹配的内容前面的空字符串相匹配,如下所示:
普通sed匹配a
$ echo a | sed "s/\(\w*\)/\1x/"
xa
Gnu sed按预期匹配a
$ echo a | gsed "s/\(\w*\)/\1x/"
ax
如果您的数据在“d”文件中,由gnu sed
sed -E 's/^(fooAction)s: (typeof \1Creators)/\1s: Partial<\2>/' d
sed-E的/^(fooAction)s:\1Creators的类型/\1s:Partial/'d
sed -E 's/^(fooAction)s: (typeof \1Creators)/\1s: Partial<\2>/' d