Löschen Sie das erste bekannte Zeichen in einer Zeichenfolge mit sed


11

Wie löscht man das erste bekannte Zeichen in einer Zeichenkette mit sed?

Angenommen, ich möchte das erste Zeichen (@) in der Zeichenfolge "@ ABCDEFG1234" löschen.

Ich möchte, dass sed überprüft, ob "@" als erstes Zeichen vorhanden ist. In diesem Fall sollte das Zeichen gelöscht werden.

Antworten:


8

sed 's/^@\(.*\)/\1/'

^ bedeutet den Beginn der Zeichenfolge

@ dein bekannter char

(.*) der Rest gefangen genommen

dann wird der erfasste Block durch die Ausgabe ersetzt. Entschuldigung, ich kann ihn momentan nicht testen, sollte aber so ähnlich sein


17

Es ist nicht erforderlich, zu erfassen und zu ersetzen.

sed 's/^@//'

Dies ersetzt das Zeichen, @wenn es das erste Mal ^in der Zeichenfolge ist, durch nichts. So löschen Sie es.


0

Sie können dies stattdessen tun.

sed 's /^.//'

^ - Starting character 
. - No of charactes(.. means two characters)

Beispiel:

echo test123 | sed 's/^.//'
est123
echo test123 | sed 's/^..//'
st123

1
Die Frage lautet: "Ich möchte, dass sed überprüft, ob" @ "als erstes Zeichen vorhanden ist. Wenn ja, sollte das Zeichen gelöscht werden. “ Ihre Antwort löscht das erste Zeichen jeder Zeile, egal was es ist. Wenn eine Zeile beispielsweise enthält test123, sieht es so aus, als ob das OP möchte, dass sie in Ruhe gelassen wird.
Scott
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.