Как избежать пробела, используя команду cut? - PullRequest
0 голосов
/ 18 января 2019

Требование: Мне нужно использовать только grep / cut / join.

У меня есть данные как:

  3 abcd
 23 xyz
1234 abc

Я хочу передать эти данные в cut и затем извлечь столбцы. Но когда я использую cut -d' ' -f 1,2, он обрабатывает каждый пробел как свой собственный разделитель столбцов. Я бы предпочел, чтобы первые два ряда были обрезаны до cut. Есть ли способ?

Пример (я использовал tr для демонстрации того, где пробелы здесь; это не разрешено в решении):

$ echo '  3 abcd
23 xyz
1234 abc' | cut -d' ' -f 1,2 | tr ' ' '_'
_
_23
1234_abc

Ожидаемый результат:

$3 abcd
23 xyz
1234 abc

1 Ответ

0 голосов
/ 18 января 2019

Используя просто grep, вы можете сделать это с помощью следующего канала:

grep -oe "[^ ][^ ]*  *[^ ][^ ]*$"

grep    # a tool for matching text
  -o    # only prints out matching text
  -e    # uses a regex
  [^ ]  # match anything that isn't a space
  *     # match zero or more of the previous element
  $     # the end of the line

Примечание : это не учитывает конечные пробелы.

Демонстрация:

$ echo '  3 abcd
 23 xyz
1234 abc' | grep -oe "[^ ][^ ]*  *[^ ][^ ]*$"
3 abcd
23 xyz
1234 abc
...