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?

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.


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

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.