LINUX.ORG.RU

Получить все строки в кавычках

 , , ,


0

1

Есть большая груда сорцов для локализации. Нужно получить из них все строки. Можно это сделать каким-нибудь лёгким путём?
Сейчас сделал так: sed 's/[^"]*"\([^"]*\)".*/\1/' *.c, но это выводит только первую строку. Можно как-нибудь легко адаптировать эту регулярку, чтобы она работала так:

# echo '"abc", "  \n asd \n sad" + "sadsdasda"' | myregex
abc
  \n asd \n sad
sadsdasda
Я думал, что можно как-то добавить пробел перед каждой нечётной кавычкой и после каждой чётной в строке, тогда регулярка будет проще: ^"\(.*\)"$, но не хотелось бы при этом изменять исходники.
ЛОР, напиши за меня регэксп.

★★★★★

Последнее исправление: CYB3R (всего исправлений: 4)

Ответ на: комментарий от AITap

Задача как раз заключается в локализации, но без gettext, ибо одна и та же английская строка может иметь несколько разных переводов в зависимости от места в коде, где она встретилась.

CYB3R ★★★★★
() автор топика
Ответ на: комментарий от anonymous

Как-то я немного сути не уловил.

echo '"abc", "  \n asd \n sad" + "sadsdasda" "drfhj"' | sed 's/^[^"]*"//;s/"[^"]*$//;s/"[^"]*"/\r/g'
abc", 
 asd 
 "drfhj

CYB3R ★★★★★
() автор топика
Ответ на: комментарий от CYB3R

Тогда так:

$ echo '"abc", "  \n asd \n sad" + "sadsdasda"' | perl -nE'say for /"([^"]+)"/g'
abc
  \n asd \n sad
sadsdasda

Хотя у меня остаётся подозрение, что можно поступить более правильно.

AITap ★★★★★
()

но это выводит только первую строку.

ну и отлично. Как я понимаю, у тебя там всего одна строка обрабатывается, да?

Удобнее таки с конца:

$ echo 'a"b"c"d"e "1 2 3"  r' | sed -rn ':l;h;s/.*"([^"]*)".*/\1/p;T;g;s/(.*)"[^"]*".*/\1/;bl'
1 2 3
d
b
надеюсь, идея ясна

emulek
()
Ответ на: комментарий от emulek

менее надёжный вариант

$ echo 'a"b"c"d"e "1 2 3"  r' | sed -rn 's/[^\"]*"([^"]*)"[^"]*/\1\n/gp'
b
d
1 2 3

emulek
()
Ответ на: комментарий от anonymous

Да, действительно, echo у меня переводит строку по '\n'.

CYB3R ★★★★★
() автор топика
echo -E '"abc", "  \n asd \n sad" + "sadsdasda"' | awk 'BEGIN {RS="\""} NR%2==0'
abc
  \n asd \n sad
sadsdasda
gorky ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.