Как я могу извлечь первый столбец (первый столбец в"")
"xxxxx1" {685a}
"xx2" {bcdd}
"xx3 gsdd" {29a6ff}
"sdsdf xxx" {243b9}
"sdfsdf ccc dd" {c28f2f}
"dsdsf sfsdf" {216e}
"sdfsdfsd" {48530}
"sdfsdff" {9d2afa0n}
"sdfsdfdff sdfs" {d8681a}
"sdfsdsds sdfsdf d" {5b9b8}
"sdfsdfs sdf sdfsdf" {68e08a}
"sdfsdfsdf sdf" {107fa0}
что я хочу иметь, поскольку результат - это:
"xxxxx1"
"xx2"
"xx3 gsdd"
"sdsdf xxx"
"sdfsdf ccc dd"
"dsdsf sfsdf"
"sdfsdfsd"
"sdfsdff"
"sdfsdfdff sdfs"
"sdfsdsds sdfsdf d"
"sdfsdfs sdf sdfsdf"
"sdfsdfsdf sdf"
какая-либо идея?
Используйте {
(пространство, фигурная скобка) как разделитель полей, так как Вы не заботитесь о втором поле:
$ awk -F ' {' '{print $1}' foo
"xxxxx1"
"xx2"
"xx3 gsdd"
"sdsdf xxx"
"sdfsdf ccc dd"
"dsdsf sfsdf"
"sdfsdfsd"
"sdfsdff"
"sdfsdfdff sdfs"
"sdfsdsds sdfsdf d"
"sdfsdfs sdf sdfsdf"
"sdfsdfsdf sdf"
Если бы Вы просто хотите все между первым и последним "
символ двойной кавычки каждой строки, большая часть простого решения, вероятно, была бы этим, с помощью grep
вместо awk
:
grep -o '".*"' FILENAME
Эти -o
переключатель позволяет grep
произвести только части соответствия вместо целой строки, которая содержит соответствие. (Единственно заключенный в кавычки, для предотвращения интерпретации оболочки) шаблон ".*"
соответствия последовательность любого символа (.
) с любой длиной (*
), включая нуль, который окружается двойными кавычками.
Как альтернатива muru's awk
решение.
использование cut
:
cut -f 1 -d { < file.txt
использование grep
:
grep -o '".*"' file.txt
или
grep -o \".*\" file.txt
использование sed
:
sed -r 's/(".*").*/\1/' file.txt
или
sed -r 's/\{.*\}//' file.txt
или даже:
sed 's/{.*//'
Perl с группировкой (.*)
может сделать это также:
$ perl -pe 's/"(.*)".*/"\1"/g' input.txt
"xxxxx1"
"xx2"
"xx3 gsdd"
"sdsdf xxx"
"sdfsdf ccc dd"
"dsdsf sfsdf"
"sdfsdfsd"
"sdfsdff"
"sdfsdfdff sdfs"
"sdfsdsds sdfsdf d"
"sdfsdfs sdf sdfsdf"
"sdfsdfsdf sdf"
прием здесь - то, что мы соответствуем целой строке и используем "(.*)"
для обработки всего между двойными кавычками как одна группа. Мы заменяем ту целую строку группой, которой мы соответствовали путем обращения к ней через \1
часть.