如何使用sed删除两个符号之间出现的所有文本?

如何使用sed删除两个符号之间出现的所有文本?,sed,Sed,我有一个文件,上面有这样的行: bear/forest/\AAA mountains/fish/ fish/\AAA stream/river/\AAA shrimp/ llama/mountains/ 我想删除出现在两个/之间的任何文本,其中出现\AAA,例如,上述内容将变为: bear/forest/fish/ fish/river/ llama/mountains/ AAA始终出现在第一个/符号之后 我已尝试进行查找和替换,匹配模式/\AAA*/,并将其替换为/,但这不起作用: sed

我有一个文件,上面有这样的行:

bear/forest/\AAA mountains/fish/
fish/\AAA stream/river/\AAA shrimp/
llama/mountains/
我想删除出现在两个
/
之间的任何文本,其中出现
\AAA
,例如,上述内容将变为:

bear/forest/fish/
fish/river/
llama/mountains/
AAA
始终出现在第一个
/
符号之后

我已尝试进行查找和替换,匹配模式
/\AAA*/
,并将其替换为
/
,但这不起作用:

sed -i -r 's/\/\\AAA*\//\//g' file.txt

我有GNU-sed版本4.2.1。

只需删除
/\AAA
/
之间的所有内容。如果模式或替换项包含
/
,则使用替代字符分隔模式可提高可读性:

sed 's,/\\AAA[^/]*/,/,g'

*
是一个元字符,表示前面的字符或组中有零个或多个。所以
A*
意味着零个或更多
A
。您必须提供
\(AAA\)*
表示零或更多
AAA
。然而,您想要的是
[/][^/]*AAA[^/]*[/]