![Ersetzen des ersten Vorkommens eines Musters in einer Zeile für alle Zeilen in einer Datei mit sed](https://rvso.com/image/22256/Ersetzen%20des%20ersten%20Vorkommens%20eines%20Musters%20in%20einer%20Zeile%20f%C3%BCr%20alle%20Zeilen%20in%20einer%20Datei%20mit%20sed.png)
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. sed
ersetzt standardmäßig nur die erste Instanz in einer Zeile (ohne den /g
Modifikator), 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