/ / Usuwanie znaków wypunktowania z pliku tekstowego za pomocą sed - regex, bash, sed

Usuwanie znaków punktowych z pliku tekstowego za pomocą sed - regex, bash, sed

Mam duży plik tekstowy, w którym niektóre linie zaczynają się od wypunktowania (•). Chciałbym je usunąć. Próbowałem

sed "s/u2022//g" filename.txt

ale to nie pasuje do pocisków. Próbowałem też wkleić pocisk do mojego polecenia sed, ale też bezskutecznie.

E: Dane wyjściowe

sed --version

jest

sed (GNU sed) 4.2.2

E2: Jeśli pomoże to dowiedzieć się, jak uchwycić znaki punktowane, zostały one pierwotnie dodane w programie Access.

E3: Jak sugerują komentarze,

echo -n "•" | hexdump -C

zwraca

00000000  95                                                |.|
00000001

Odpowiedzi:

2 dla odpowiedzi № 1

Sugeruję przy pomocy GNU sed:

sed "s/xe2x80xa2//g" file

Aktualizacja:

sed "s/x95//g" file

2 dla odpowiedzi nr 2

To jest dla mnie działające polecenie:

# Force paste the bullet into the command line
sed "s/^•//g" filename.txt

Jeśli to nie działa, spróbuj uciec echo:

sed "s/^""$(echo -ne "u2022")""//g" filename.txt

Tak jak Pesa Sugeruje, możesz także użyć printf za ucieczkę:

sed "s/^""$(printf "u2022")""//g" filename.txt

0 dla odpowiedzi № 3

To wygląda jak sed nie rozumie u sekwencje. Zgodnie z instrukcją obsługi powinien on być zgodny z POSIX.2 BRE, który moim zdaniem powinien działać, ale nie działa.

Możesz spróbować przechwycić sekwencję szesnastkową (której używałem hexdump -C).

sed  "s/^xe2x80xa2//g" filename.txt

Możesz też zmusić bash parsować to. Po prostu dodaj $ przed sznurkiem.

sed $"s/u2022//g" filename.txt