Как изменить символ после определенного точного символа с помощью команды SED? - PullRequest
0 голосов
/ 10 апреля 2019

Я писал сценарий bash, чтобы изменить все значения B'10 на B'12 в файлах.

Итак, у меня есть файл, где B'10 'упоминается много раз. И это также может быть B'1010101010 "с различной длиной. Все это должно быть B'12121212". Я попытался изменить с помощью команды SED:

sed -i -r "/[B'][10]+/s/10/12/g" filename 

sed -i -r "/[B'][[0-9][0-9]]*[10]+/s/10/12/g" filename

Я должен был указать его дважды, только для совпадения B'10 'и множества B'1010101010 .. ". Если я указывал только вторую команду, он игнорировал одиночные совпадения B'10'. Итак, эта команда изменяя значения, но они изменяются для всех найденных совпадений «10». Но мне нужно изменить только после точно B и одного столбца рядом с символом B.

Вся помощь приветствуется! Спасибо.

Ответы [ 3 ]

2 голосов
/ 10 апреля 2019

, если ваш sed поддерживает метки:

sed ':1 s/\(B\x27\(12\)*\)10/\112/; t1' file # or
sed -E ':1 s/(B\x27(12)*)10/\112/; t1' file
  • :1 метка 1,
  • (B\x27(12)*) соответствует B', за которым следует ноль или более 12s, помещает его в группу захвата 1,
  • \1 расширяется до значения, сохраненного в группе захвата 1,
  • t1 означает «если успешная замена выполнена, вернитесь кярлык 1 ".
1 голос
/ 12 апреля 2019

попробуйте gnu sed перед использованием опции -i;

sed -E ":s s/\b(B')((12)*)10(10|\"|')/\1\212\4/ ;ts"  filename
0 голосов
/ 10 апреля 2019

Если вы хотите изменить все 10 после B', начните с последнего 10 в 1010...10.
После замены последнего сделайте это снова и замените новый последний 10.

echo "B'1010101010111213" | sed -r ":a; s/B'((10)*)(10)/B'\112/; ta"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...