Portál AbcLinuxu, 6. května 2025 04:17
<> aaasasdaasfddsfsdf <+> <> aaasasdaasfddsfsdf <+> <> aaasasdaasfdd sdsdsdsd sdsdsdsdsd sdsdsdsdsdsfsdf <+>Vyslednu text bych chtel v teto podobe:
<> aaasasdaasfddsfsdf <+> <> aaasasdaasfddsfsdf <+> <> aaasasdaasfddsdsdsdsdsdsdsdsdsdsdsdsdsdsdsfsdf <+>Tedy, potrebuji takovu regularni vyraz, ktery by jednotlive vety mezi tagy a dal do jednoho radku. Potrebuji takto upravit hromadu textu pro snazsi kontrolu v diffu (bude snazsi nachazet a oznacovat chybne radky). Budu rad, pokud mi nekdo poradi prislusny regularni vyraz v sed nebo prikaz v awk. Vim, jak v awk odstranit vsechny znaky newline, ale mezi tagy mi to nejde. Zatim jsem v awk dospel k tomuto prikazu (ktery ale nedela pozadovane). Mozna by ho stacilo jen nejak lehce upravit?
cat text1 | awk 'BEGIN{RS="<+>"}{printf "%s", $0}'
Řešení dotazu:
sed -e ':a;N;$!ba;s/\n//g' -e 's/\(<+>\)/\1\n/g'
sed: -e expression #2, char 12: unknown option to `s'Hadam, ze se v regularnim vyrazu musi nejak vyjadrit, ze tag neni specialni znacka pro vyraz, nejak to odblokovat. Zkousel jsem to ruzne obehnat zpetnyma lomitkama, ale furt to nejde.
sed -e ':a;N;$!ba;s/\n//g' -e 's/\(<\/s>\)/\1\n/g'
cat out.txt |awk 'BEGIN{tmp=""} $0 ~ /.*<\/s>.*/{print tmp $0;tmp="";} $0 !~ /.*<\/s>.*/{tmp=tmp $0}'
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.