这是我的文件example.txt
{foo}
{bar}
{f}oo}
{ba{r}
{fo}o}
{b{ar}
我想要这个结果:
<div class="id">foo</div>
<div class="id">bar</div>
<div class="id">f}oo</div>
<div class="id">ba{r</div>
<div class="id">fo}o</div>
<div class="id">b{ar</div>
我在记事本++中有命令获得上面的结果
([}]\r\n)|(\r\n[{])|(^[{])|([}]$)
(?1}</div>)(?2<div class="id">{)(?3<div class="id">{)(?4}</div>)
我尝试了这个sed
命令
sed -i 's@}\r\n@</div>@g' *.html
这使我的文件保持不变。如何使用sed
正确执行此操作?
答案 0 :(得分:2)
使用以下sed
命令和特定的正则表达式模式:
sed -ri 's/\{(.+)\}/<div class="id">\1<\/div>/g' testfile
-r
选项允许扩展正则表达式
\{(.+)\}
- 匹配用大括号{}
\1
- 指向第一个捕获的组(.+)
答案 1 :(得分:1)
如何使用两个简单的表达式,如下所示:
sed -i '' -e 's/^./<div class="id">/;s/.$/<\/div>/' file
<div class="id">
,将最后一个字符替换为</div>
,保留该行的其余部分。给出这个输出:
<div class="id">foo</div>
<div class="id">bar</div>
<div class="id">f}oo</div>
<div class="id">ba{r</div>
<div class="id">fo}o</div>
<div class="id">b{ar</div>
答案 2 :(得分:0)
怎么样
sed -e 's/{\(.*\)}/<div class="id">\1<\/div>/'
sed是面向行的,所以你不会在记录中找到\n
(除非你使用了一些高级命令)。
答案 3 :(得分:0)
您可能会对用户 Perl
感兴趣$ cat file
{foo}
{bar}
{f}oo}
{ba{r}
{fo}o}
{b{ar}
$
$ perl -lpe 's/^.(.*?).$/<div class="id">\1<\/div>/' file
$
<div class="id">foo</div>
<div class="id">bar</div>
<div class="id">f}oo</div>
<div class="id">ba{r</div>
<div class="id">fo}o</div>
<div class="id">b{ar</div>
它还有保存,例如sed
-i