Как имитировать "cut -d: -f2" с помощью sed?("(. *): (. *):" соответствует слишком много полей) - PullRequest
0 голосов
/ 10 декабря 2018

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

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

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

1 Ответ

0 голосов
/ 10 декабря 2018

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

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

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

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

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

...