Ersetzen des ersten Vorkommens eines Musters in einer Zeile für alle Zeilen in einer Datei mit sed

Ersetzen des ersten Vorkommens eines Musters in einer Zeile für alle Zeilen in einer Datei mit sed

Ist es möglich, dies in einer Zeile zu erledigen?

Ich habe eine Ausgabe wie diese:

"First line" - Description  
" Second line" - Description  
"Third line" - Description  
" Fourth line" - Description  

Diese Eingabe wird automatisch generiert.

"Ich möchte das erste Vorkommen von (Anführungszeichen + Leerzeichen) "in jeder Zeile durch (Anführungszeichen) ersetzen . Wenn ich die Ersetzung global anwende, wird auch jedes Vorkommen von line" -in geändert line"-, daher habe ich mich gefragt, ob dies mit einem sed-Einzeiler erreicht werden kann.

Ich habe versucht, ^es so zu verwenden

sed -r ':a;N;$!ba;s/(\^\" )/\"/g'

Aber es funktioniert nicht, es ersetzt nichts. Ich habe versucht

sed -r ':a;N;$!ba;s/(^|\" )/\"/g'

und es ersetzt alle Vorkommen. Ich habe gerade erst angefangen, sed zu verwenden, also weiß ich nicht wirklich, ob ich etwas falsch mache.

Was übersehe ich hier?

Antwort1

Sie denken zu viel darüber nach. sedersetzt standardmäßig nur die erste Instanz in einer Zeile (ohne den /gModifikator), obwohl Sie dennoch verankern möchten, weil Sie nicht so sehr die erste Instanz in der Zeile möchten, sondern die am Anfang der Zeile; und Sie benötigen normalerweise nicht die expliziten Zeilenaktionen, die Sie verwenden möchten (warum?).

sed 's/^" /"/'

Antwort2

Eine allgemeinere Antwort, da ich die Antwort von geekosaur nicht kommentieren kann: Sie würden das ^ (Anker am Zeilenanfang) nicht setzen. Wenn Sie beispielsweise das erste Vorkommen von A durch B ersetzen möchten, müssten Sie

sed 's/A/B/'

Antwort3

Verwenden vonPerl

~$ perl -pe 's/^" /"/;'   file 

Verwenden vonRaku(früher bekannt als Perl_6)

~$ raku -pe 's/^\" \s /"/;'  file

Beispieleingabe:

"First line" - Description  
" Second line" - Description  
"Third line" - Description  
" Fourth line" - Description  

Beispielausgabe (beide Codebeispiele):

"First line" - Description  
"Second line" - Description  
"Third line" - Description  
"Fourth line" - Description  

https://perldoc.perl.org/perlre
https://perldoc.perl.org/perltrap#Sed-Traps
https://docs.raku.org/language/regexes

verwandte Informationen