2017-02-28 2 views
2

Das ist meine Datei example.txtWie mehrere Muster tun ersetzt mit sed

ist
{foo} 
{bar} 
{f}oo} 
{ba{r} 
{fo}o} 
{b{ar} 

Ich möchte dieses Ergebnis:

<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> 

i Befehl in Notepad ++ haben, um das Ergebnis als oben

([}]\r\n)|(\r\n[{])|(^[{])|([}]$) 
(?1}</div>)(?2<div class="id">{)(?3<div class="id">{)(?4}</div>) 

Ich versuchte mit diesem sed Befehl

sed -i '[email protected]}\r\[email protected]</div>@g' *.html 

, die meine Datei unverändert gelassen hat. Wie geht das richtig mit sed?

Antwort

2

Verwenden Sie den folgenden sed Befehl mit spezifischen RegexMuster:

sed -ri 's/\{(.+)\}/<div class="id">\1<\/div>/g' testfile 

-r Option ermöglicht erweiterte reguläre Ausdrücke


\{(.+)\} - Für jeden mit geschweiften Klammern Zeichen {}

\1 - zeigt auf die erste erfasste Gruppe Das ist (.+)

+0

hallo Tanks für Antwort, aber Ihr Befehl mich nicht funktioniert, habe ich über meine Frage bearbeiten, { und } nur mit Streichhölzern Top-Linien und Endlinie –

+0

@kijiroluduatiga zu ersetzen, überprüfen meine update, es funktioniert für dein neues Eingabebeispiel – RomanPerekhrest

0

Wie wäre es

sed -e 's/{\(.*\)}/<div class="id">\1<\/div>/' 

sed ist zeilenorientiert, so dass Sie nicht \n in einem Datensatz finden (es sei denn, Sie einige der erweiterten Befehle verwenden).

+0

, wie viele Haltern innerhalb {} Beispiel {f} oo {bar}, und ich will führen

f}oo{bar
, so dass nur ersetzen Halter in angepassten obere Zeile und neue Zeile verwenden^{und} $ nicht ersetzen arbeiten an sed –

1

Wie wäre es mit zwei einfachen Ausdrücken, wie folgt aus:

sed -i '' -e 's/^./<div class="id">/;s/.$/<\/div>/' file 
  • das erste Zeichen mit <div class="id"> und das letzte Zeichen mit </div> ersetzt den Rest der Zeile intakt bleibt.
  • keine Notwendigkeit für Einfanggruppen

gibt diese Ausgabe:

<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> 
0

Es kann Sie Benutzer interessieren 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> 

Es hat auch speichern an Ort und Stelle li ke sed mit -i