regex - SED 在文件中替换

标签 regex sed

我正在尝试在文件中进行简单的(我认为)搜索和替换。

搜索 @{...} 之间包含的测试并将其替换为 %<...> .

例如:

  1. @{SOMETEXT_A}变成$<SOMETEXT_A>
  2. @{SOMETEXT_B}变成$<SOMETEXT_B>
  3. @{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/

相关文章:

regex - 仅删除特定行的换行符/换行符

linux - 使用 awk 或 sed 比较多个文件的长度

sed - 删除包含另一个图案的多线图案

linux - 破译bash文件中的不同列

regex - 选择 Jsonb 数组包含正则表达式匹配

javascript - 正则表达式不允许单引号和双引号

jquery - 如何在 JQuery 中搜索和替换 HTML 文本字符串?

python正则表达式替换匹配字符串的一部分

sed - 使用 Sed 删除多行

javascript - 使用正则表达式将日期/时间字符串拆分为标记