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 № 1Sugeruję 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