Grep слово внутри двойной кавычки

Как я могу извлечь слово внутри двойной кавычки внутри файла? например

variable "xxx"

3 ответа

Чтение текстового файла в Tcl просто так:

set fd [open $filename]
set data [read $fd]        ;# Now $data is the entire contents of the file
close $fd

Чтобы получить первую строку в кавычках (при некоторых предположениях, в частности отсутствие двойных кавычек в обратной кавычке внутри двойных кавычек), используйте это:

if {[regexp {"([^""]*)"} $data -> substring]} {
    # We found one, it's now in $substring
}

(Удваивать цитату в скобках совершенно не нужно - нужен только один - но это означает, что маркер делает правильные вещи здесь.)

Самый простой способ найти все строки в кавычках это:

foreach {- substring} [regexp -inline -all {"([^""]*)"} $data] {
    # One of the substrings is $substring at this point
}

Обратите внимание, что я использую одно и то же регулярное выражение в каждом случае. На самом деле, это хорошая практика - разделять такие RE (особенно если их многократно) в свою собственную переменную, чтобы вы могли "назвать" их.


Объединяя все эти вещи выше:

set FindQuoted {"([^""]*)"}

set fd [open $filename]
foreach {- substring} [regexp -inline -all $FindQuoted [read $fd]] {
    puts "I have found $substring for you"
}
close $fd

Внутреннее соответствие

Если вы просто ищете регулярное выражение, то вы можете использовать группы захвата TCL. Например:

set string {variable "xxx"}
regexp {"(.*)"} $string match group1
puts $group1

Это вернется xxx, отбрасывая цитаты.

Внешнее соответствие

Если вы хотите сопоставить данные в файле без необходимости непосредственного чтения файла в TCL, вы можете сделать это тоже. Например:

set match [exec sed {s/^variable "\(...\)"/\1/} /tmp/foo]

Это вызовет sed, чтобы найти только те части соответствия, которые вы хотите, и назначить их переменной TCL для дальнейшего процесса. В этом примере переменная соответствия установлена ​​в xxx как указано выше, но работает с внешним файлом, а не с сохраненной строкой.

Когда вы просто хотите найти с grep все слова в кавычках в файле и делать что-то со словами, вы делаете что-то вроде этого (в оболочке):

grep -o '"[^"]*"' | while read word
do
   # do something with $word
   echo extracted: $word
done
Другие вопросы по тегам