Команда Unix для удаления перед определенным полем по длине перед строкой - PullRequest
0 голосов
/ 26 января 2019

Как удалить поле фиксированной длины перед строкой.

Пример

Ввод:

"abcdefg": {"field_string","xxx","yyy"}, "hijklmn": {"field_string","xyz","dey"}, "opqrstu": {field_string","xxx","yyy"}

Вывод:

{"field_string","xxx","yyy"}, {"field_string","xyz","dey"}, {field_string","xxx","yyy"}

перед'{"field_string' длина символа должна быть удалена

Ввод повторяется в каждой строке

Спасибо

1 Ответ

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

Простой способ:

sed -e 's/.\{11\}\({[^}]*}\)/\1/g'

Так как вы сказали fixed length, так что просто удалите 11 символов перед каждым {} блоком.

Или более точным способом (удалите "...": перед {} блоком):

sed -e 's/"[^"]*": \({[^}]*}\)/\1/g'

Обратите внимание, что выше не проверялось file_string существует или нет, если вы хотите, и не уверены, что существует первый " или нет, используйте это:

sed -e 's/"[^"]*": \({"\{0,1\}field_string[^}]*}\)/\1/g'

Или строго с вашим описанием:

sed -e 's/"[^"]*": \({"\{0,1\}field_string\)/\1/g'

Например:

$ cat file
"abcdefg": {"field_string","xxx","yyy"}, "hijklmn": {"field_string","xyz","dey"}, "opqrstu": {field_string","xxx","yyy"}

$ sed -e 's/"[^"]*": \({"\{0,1\}field_string\)/\1/g' file
{"field_string","xxx","yyy"}, {"field_string","xyz","dey"}, {field_string","xxx","yyy"}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...