Заменить N-ую пару регулярных выражений на sed - PullRequest
0 голосов
/ 11 ноября 2018

У меня есть набор данных, который выглядит следующим образом:

1099511629352|Nunez|Jorge|female|17/11/2000|2011-04-04T05:54:52.693+0000|201.221.59.59|Opera|Facebook

Разделитель столбцов в этом случае - | -> Я хочу заменить N-й столбец ($pos), учитывая идентификатор одной строки, используя sed.

Вот что я придумала сейчас:

  • Найти N-е совпадение регулярного выражения [$columnsep]*[a-zA-Z0-9./\-:+]+

  • строки, начинающейся с данного $id

  • Заменить этот случай на $columnsep$editvalue

Таким образом, соответствующая команда sed будет:

sed "/^$id/[$columnsep]*[a-zA-Z0-9./\-:+]+/$columnsep$editvalue/$pos}" $file

Я получаю [a- ...": invalid command code [, хотя он работает с онлайн-тестерами регулярных выражений, такими как https://regexr.com/

1 Ответ

0 голосов
/ 11 ноября 2018

Примерно так будет работать, если $columnsep не длиннее одного символа.

sed "/^$id/s/[$columnsep]*[^$columnsep]*/$columnsep$editvalue/$pos" "$file"

Но я предлагаю использовать awk для подобных задач

awk -F "$columnsep" -v OFS="$columnsep" -v id="$id" -v editvalue="$editvalue" -v pos="$pos" '
  ($1==id){$pos=editvalue}1' "$file"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...