我正在尝试在文件中进行简单的(我认为)搜索和替换。
搜索 @{...}
之间包含的测试并将其替换为 %<...>
.
例如:
-
@{SOMETEXT_A}
变成$<SOMETEXT_A>
-
@{SOMETEXT_B}
变成$<SOMETEXT_B>
-
@{SOMETEXT_C}
变成$<SOMETEXT_C>
我在 sed 中有这个与搜索参数匹配的内容,
sed -i 's/\@{.\*}/\$<.\*>/g' input.txt
..但不会将字符串复制到结果中,而是生成
$<.*>
如何将正则表达式匹配从“.*”复制到替换字符串中?
非常感谢
最佳答案
你可以使用
sed -i 's/@{\([^{}]*\)}/$<\1>/g' file
参见an online demo :
s='@{SOMETEXT_A} becomes $<SOMETEXT_A>
@{SOMETEXT_B} becomes $<SOMETEXT_B>
@{SOMETEXT_C} becomes $<SOMETEXT_C>'
sed 's/@{\([^{}]*\)}/$<\1>/g' <<< "$s"
# => $<SOMETEXT_A> becomes $<SOMETEXT_A>
# $<SOMETEXT_B> becomes $<SOMETEXT_B>
# $<SOMETEXT_C> becomes $<SOMETEXT_C>
@{\([^{}]*\)}
正则表达式是符合 POSIX BRE 的匹配模式
@{
-@{
文字字符串\([^{}]*\)
- 捕获与零个或多个其他字符匹配的组 1(在替换模式中用\1
引用)比花括号}
- 一个}
字符。
关于regex - SED 在文件中替换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66399203/