Вопрос по команде sed? - PullRequest
       5

Вопрос по команде sed?

0 голосов
/ 23 июня 2010

Я пытаюсь использовать sed для удаления частей текстового файла с такими строками, как:

23920 E S: 1 R: 2 C: 14 L: 5 ч 80 7279 1113 5272 -342 1168 5642 -347 1265 5587

23921 E S: 1 R: 2 C: 14 L: 6 ч 1 4605 1267 4586 11 1331 4587 -31 1306 4692

Части, которые мне нужно удалить, это такие части, как E S:1 R:2 C:14 L:5 ch 80 и E S:1 R:2 C:14 L:6 ch 1 в каждой строке. Числа меняются по всему файлу, но всегда находятся между 1 и 100.

Ответы [ 2 ]

2 голосов
/ 23 июня 2010

Вы также можете использовать cut для этого, если это всегда те же поля:

jed@jed-osx:~$ echo "23920 E S:1 R:2 C:14 L:5 ch 80 7279 1113 5272 -342 1168 5642 -347 1265 5587
23921 E S:1 R:2 C:14 L:6 ch 1 4605 1267 4586 11 1331 4587 -31 1306 4692" | cut -d" " -f1,8-
23920 80 7279 1113 5272 -342 1168 5642 -347 1265 5587
23921 1 4605 1267 4586 11 1331 4587 -31 1306 4692

РЕДАКТИРОВАТЬ: Объяснение используемой команды вырезать:

-d" " Использовать пробел в качестве разделителя

-f 1,8- Возвращает поле 1, поле 8 и все поля после 8

1 голос
/ 23 июня 2010

Решение sed

linux-t77m:$ more st.txt
23920 E S:1 R:2 C:14 L:5 ch 80 7279 1113 5272 -342 1168 5642 -347 1265 5587

23921 E S:1 R:2 C:14 L:6 ch 1 4605 1267 4586 11 1331 4587 -31 1306 4692

linux-t77m:$ sed -r "s/E S:.* ch [0-9]+ //g" st.txt
23920 7279 1113 5272 -342 1168 5642 -347 1265 5587

23921 4605 1267 4586 11 1331 4587 -31 1306 4692

Это делается с помощью подстановки регулярного выражения.Команда s / / / g заменяет каждую часть каждой строки, соответствующую для .

. В этом случае равно E S:.* ch [0-9]+, что означает:

  1. ищите ES:
  2. , затем ищите все, пока не увидите
  3. пробел, предшествующий ch, ​​за которым следует пробел, одна или несколько цифр и еще один пробел

И - пустая строка, поэтому она эффективно удаляет соответствующие ей строки.

Ключ -r указывает на то, что мы используем «расширенные» регулярные выражения, которые обычнопонятнее, потому что им не нужно так много обратной косой черты, которая потребовалась бы для регулярных регулярных выражений sed.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...