Как имитировать cut -d: -f2 с помощью sed? ((.*):(.*): соответствие слишком большому количеству полей)

Просто для ясности: я тестирую свой код на /etc/passwd. Я пытаюсь вырезать второй столбец из текста с помощью sed (это упражнение от моего учителя, поэтому я больше ничего не использую). я пытался использовать

sed 's/\(.*\):\(.*\):\(.*\)/\2/' /etc/passwd

но он вырезает предпоследний столбец, вероятно, потому, что sed берет все символы, пока не найдет два последних «:». Как я могу вырезать второй столбец, не указывая, сколько из них будет в файле?


person Argos    schedule 09.12.2018    source источник


Ответы (1)


Как вы определили, .* может соответствовать любому количеству символов, включая :.

[^:]*, напротив, соответствует всем, кроме :, поэтому он не склонен к этому.

Как отмечает Виктор в комментариях, тогда:

sed -Ee 's/^([^:]*):([^:]*):.*/\2/' <<<'one:two:three:four'

... правильно возвращает two.

person Community    schedule 09.12.2018