sed - 搜索和替换总是将捕获组放在末尾
sed - Search and replace always puts capture group at the end
我正在跨大量文件重构一些代码,并尝试在 Mac.
上使用 sed
进行搜索和替换
目标是从这里开始:
fooActions: typeof fooActionCreators
对此:
fooActions: Partial<typeof fooActionCreators>
我主要使用这个 sed 表达式让它工作:
ag -l "Actions: typeof " | xargs sed -i "" -e "s/Actions: typeof \(\w*\)/Actions: Partial<typeof >/g"
基本上使用 ag
查找包含匹配字符串的文件名列表,然后使用 xargs
将这些作为输入传递给我的 sed
表达式。
我得到的输出如下所示:
fooActions: Partial<typeof >fooActionCreators
我不明白为什么我的捕获组被放在 then 末尾而不是我在替换子句中的位置。
mac自带的sed不支持\w
单词字符。
如果您有 gsed (gnu sed),这应该可以按预期工作。
$ echo 'Actions: typeof foo' | gsed -e "s/Actions: typeof \(\w*\)/Actions: Partial<typeof >/g"
Actions: Partial<typeof foo>
否则你可以使用 [a-zA-Z]*
而不是 \w*
。
$ echo 'Actions: typeof foo' | sed -e "s/Actions: typeof \([a-zA-Z]*\)/Actions: Partial<typeof >/g"
Actions: Partial<typeof foo>
您看到的看似奇怪的行为是因为在普通 sed 版本中,\w*
匹配您希望匹配的内容前面的空字符串,如下所示:
Plain sed 匹配 a
前面的空字符串
$ echo a | sed "s/\(\w*\)/x/"
xa
Gnu sed 按预期匹配 a
$ echo a | gsed "s/\(\w*\)/x/"
ax
如果您的数据在 'd' 文件中,通过 gnu sed,
sed -E 's/^(fooAction)s: (typeof Creators)/s: Partial<>/' d
我正在跨大量文件重构一些代码,并尝试在 Mac.
上使用sed
进行搜索和替换
目标是从这里开始:
fooActions: typeof fooActionCreators
对此:
fooActions: Partial<typeof fooActionCreators>
我主要使用这个 sed 表达式让它工作:
ag -l "Actions: typeof " | xargs sed -i "" -e "s/Actions: typeof \(\w*\)/Actions: Partial<typeof >/g"
基本上使用 ag
查找包含匹配字符串的文件名列表,然后使用 xargs
将这些作为输入传递给我的 sed
表达式。
我得到的输出如下所示:
fooActions: Partial<typeof >fooActionCreators
我不明白为什么我的捕获组被放在 then 末尾而不是我在替换子句中的位置。
mac自带的sed不支持\w
单词字符。
如果您有 gsed (gnu sed),这应该可以按预期工作。
$ echo 'Actions: typeof foo' | gsed -e "s/Actions: typeof \(\w*\)/Actions: Partial<typeof >/g"
Actions: Partial<typeof foo>
否则你可以使用 [a-zA-Z]*
而不是 \w*
。
$ echo 'Actions: typeof foo' | sed -e "s/Actions: typeof \([a-zA-Z]*\)/Actions: Partial<typeof >/g"
Actions: Partial<typeof foo>
您看到的看似奇怪的行为是因为在普通 sed 版本中,\w*
匹配您希望匹配的内容前面的空字符串,如下所示:
Plain sed 匹配 a
$ echo a | sed "s/\(\w*\)/x/"
xa
Gnu sed 按预期匹配 a
$ echo a | gsed "s/\(\w*\)/x/"
ax
如果您的数据在 'd' 文件中,通过 gnu sed,
sed -E 's/^(fooAction)s: (typeof Creators)/s: Partial<>/' d