sed one-liner, aby usunąć wszystko między parą nawiasów?

15

Pracuję z tekstem pełnym nawiasów kwadratowych [], którego nie chcę. Ponieważ mogę samodzielnie usunąć nawiasy klamrowe, nie potrzebuję do tego celu jednej linijki, ale potrzebuję jednej linijki, która usunie wszystko między nimi.

Co z nawiasami () zamiast nawiasów?

ixtmixilix
źródło

Odpowiedzi:

20

Zastąp [some text]pustym ciągiem. Zakładając, że nie chcesz analizować zagnieżdżonych nawiasów, some textnie może zawierać żadnych nawiasów.

sed -e 's/\[[^][]*\]//g'

Należy zauważyć, że w wyrażeniu wspornika [^][]pasujące do niczego, ale [czy ]The ]musi pochodzić w pierwszej kolejności. Zwykle a ]kończy zestaw znaków, ale jeśli jest to pierwszy znak w zestawie (tutaj, po ^znaku uzupełniającym), ]oznacza to sam.

Jeśli chcesz przeanalizować zagnieżdżone nawiasy klamrowe lub jeśli tekst w nawiasach kwadratowych może obejmować wiele linii, sed nie jest właściwym narzędziem.

Gilles „SO- przestań być zły”
źródło
dzięki, @Gilles ... btw, może obejmować wiele linii, ale używam skryptu Perla do łączenia linii ...
ixtmixilix
@ixtmixilix: Jeśli masz skrypt Perla, możesz go również usunąć z nawiasów tekstowych. W Perlu możesz pisać s/\[[^\[\]]*\]//g(tzn. Używać ukośników odwrotnych, aby uciec przed członkami zestawu znaków).
Gilles 'SO - przestań być zły'
@Gilles, czy możesz wyjaśnić więcej na temat [^] [] dokładnie plz. dziękuję
Arash
1
@arashams […]= zestaw znaków. ^jako pierwszy znak oznacza uzupełnienie zestawu. ]zwykle oznacza koniec zestawu, ale jeśli jest to pierwszy znak inny niż ^, jest to zwykły znak - pusty zestaw lub dopełnienie pustego zestawu jest niedozwolony. To [jest zwyczajne i ]kończy zestaw.
Gilles „SO- przestań być zły”
@Gilles tnx za pomoc, ale wciąż nie rozumiem :( jaka dawka to znaczy? "^ Jako pierwszy znak oznacza uzupełnienie zestawu" mam na myśli to, co robi? Na przykład czy jest dopasowany do wszystkich treści?
Arash
9

Polecenie sed -e 's/([^()]*)//g'wykona nawiasy zamiast nawiasów.

ixtmixilix
źródło