2017-01-16 3 views

ответ

1

Я имитировать data.txt файл с

datatxt="Line 1 without colon 
I want this:the part before the colon 
nope, not me 
other line with colon:that can be found" 

Ваша команда показывает первое поле всех линий

echo "${datatxt}" | cut -f 1 -d ":" 
Line 1 without colon 
I want this 
nope, not me 
other line with colon 

Вы можете получить строки с : при использовании grep первый:

echo "${datatxt}" | grep ":" | cut -f 1 -d ":" 
I want this 
other line with colon 

Вы можете добавить | head -1 для вывода одной строки.
Эти инструкции также могут быть выполнены с помощью sed. С СЭД можно удалить все после двоеточия:

echo "${datatxt}" | sed 's/:.*//' 
Line 1 without colon 
I want this 
nope, not me 
other line with colon 

В sed добавления Grep может быть сделано путем поиска строк с /:/.
Вы должны комбинировать это с -n и p.

echo "${datatxt}" | sed -n '/:/ s/:.*//p' 
I want this 
other line with colon 

Если вы хотите, один линейный выход, вы можете использовать

echo "${datatxt}" | sed -n '/:/ s/:.*//p' | sed -n '1p' 
# OR SHORTER 
echo "${datatxt}" | sed -n '/:/ {s/:.*//p;q}' 
1

Если вы выбираете линию на основе номера строки, вы можете использовать sed. Например, для линии 10, сделайте следующее:

cat "./Desktop/data.txt"| cut -f 1 -d ":" | sed -n 10p 
  • -n рассказывает СЭД не печатать строки по умолчанию
  • 10p рассказывает SED, когда он попадает в линию 10, он должен напечатать.

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

Примечание: в исходном сообщении указано echo "./Desktop/data.txt", и я предполагаю, что это должно быть кошка, а не эхо.

2

Это задача идеально подходит для AWK:

awk -F: 'NR == 2 {print $2}' "./Desktop/data.txt" 
  • -F: устанавливает разделитель полей для :
  • NR == 2 является образцом означает "запись (строка) число равно 2"
  • {print $2} - действие, выполняемое при сопоставлении с образцом, означающее «печать второго поля»