Удаление всего после паттерна в Unix - PullRequest
0 голосов
/ 29 мая 2018

У меня есть строка replenishment_category string,Date string, я хочу удалить все, начиная с Date (включая его), а также запятую перед ним, если она присутствует.

У меня есть строка, подлежащая замене, сохраненнаяв переменной:

PARTITION_COLUMN='Date'

Я пытался sed заменить все после переменной PARTITION_COLUMN

echo "replenishment_category string,Date string" | sed "s/"$PARTITION_COLUMN".* //g"

, но на выходе все еще есть строка, которая следует за датой:

replenishment_category string,string

Как удалить часть string, а также запятую, предшествующую Date?

Ответы [ 4 ]

0 голосов
/ 29 мая 2018

Вы можете сделать это только с расширением параметров оболочки, при условии, что у вас включены расширенные глобусы (shopt -s extglob):

$ var='replenishment_category string,Date string'
$ part_column=Date
$ echo "${var%%?(,)"$part_column"*}"
replenishment_category string
  • Расширение ${word%%<em>pattern</em>} работает без расширенных глобусов и удаляет самые длинныесовпадение pattern с конца $word.
  • Расширенный шаблон ?(<em>pattern</em>) соответствует нулю или одному вхождению pattern и используется дляудалите запятую, если она есть.
  • "$part_column"* соответствует любой строке, которая начинается с расширения $part_column.Заключение в кавычки не требуется в этом примере, но рекомендуется не допускать расширения глобальных символов.
0 голосов
/ 29 мая 2018

Поскольку вы хотите удалить переменную, а также запятую перед ней, вам может помочь следующее sed.

echo "replenishment_category string,Date string" | sed "s/,$PARTITION_COLUMN.*//g"
0 голосов
/ 29 мая 2018

sed очевидно будет работать здесь:

echo "replenishment_category string,Date string" | sed "s/\b,$PARTITION_COLUMN.*//"

Вывод:

replenishment_category string

0 голосов
/ 29 мая 2018

Попробуйте это:

echo "replenishment_category string,Date string" | sed "s/$PARTITION_COLUMN.*//"

Обратите внимание на пробел, удаленный после .*, и двойные кавычки вокруг всей команды.

...