Jak usunąć wszystkie wystąpienia określonego symbolu z pliku tekstowego?


13

Mam ogromny (około połowy GiB, niemożliwy do użycia zwykłego edytora tekstowego) plik CSV z polami zawartymi w podwójnych cudzysłowach, takich jak, "abc","def"ale potrzebuję pliku bez cudzysłowów (jestem pewien, że to nie złamie spójności pliku - przecinek nigdy nie jest używany wewnątrz zawartych w nim wartości).

Jak usunąć wszystkie cytaty (bez wprowadzania spacji w ich miejscach)?

Odpowiedzi:


21

tr mogę to zrobić:

tr -d \" < infile > outfile

Możesz również użyć sed:

sed 's/"//g' < infile > outfile

1
Dlaczego usunąłeś < infile > outfile? IMHO było bardziej pouczające.
Ivan

@Ivan Myślałem, że prawdopodobnie jest to domniemana druga myśl.
Chris Down

Tylko gdy dla doświadczonych użytkowników linii poleceń. Mimo że korzystałem <już kilka razy (do importowania skryptów SQL do MySQL i SQLite), od razu byłoby dla mnie oczywiste, że powinienem użyć <w tym przypadku. Myślę, że lepiej byłoby zwrócić pełny przykład wiersza poleceń z powrotem w celu uzyskania dalszych informacji o tych, którzy mogą go potrzebować.
Ivan

@Ivan i @Chris, przywróciłem go z powrotem (w oczekiwaniu na recenzję) < infile > outfile, mam nadzieję, że to w porządku.
donotingsnie udane

Dzięki, @donothings pomyślnie. Całkowicie błędnie wpisałem poprzedni komentarz, szkoda, że ​​nie mogę go edytować% -]
Ivan

5

Inna wersja polecenia sed :

sed -i s/\"//g file.txt
  • sed s TREAM wyd itor

    • -i i n-place (edytuj plik na miejscu)
    • se polecenie ubstitute
    • /replacement_from_reg_exp/replacement_to_text/ komunikat
    • \"cytaty poprzedzone odwrotnym ukośnikiem ( replace_from_reg_exp )
    • pusty ciąg między delemiters ukośnik ( replacement_to_text )
    • g g lobal (dla zamiany wszystkich wystąpień w linii)
  • file.txt nazwa pliku

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.