используя параметры sed \ 1, \ 2 в той же части выражения - PullRequest
0 голосов
/ 26 сентября 2019

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

somePtrName->ARRAY[0] == somePtrName->ARRAY[0]

Всякий раз, когда имена указателей совпадают , я хочу использовать sed для замены строкии вместо этого напишите true.Я попробовал следующий рецепт, но он не сработал:

$ sed 's/[^=]* == \1/true/' input.txt

Я получил:

sed: -e expression #1, char 19: Invalid back reference

Возможно, я был слишком наивен, чтобы поверить, что могу использовать \1 в том же самомсторона была определена?

Ответы [ 2 ]

1 голос
/ 26 сентября 2019

Сначала нужно захватить символы, добавив скобки вокруг шаблона, предназначенного для отлова, а затем только вы можете ссылаться на него.

sed 's/\([^=]*\) == \1/true/' input.txt

или

sed 's/\([^=]\+\) == \1/true/' <<<"somePtrName->ARRAY[0] == somePtrName->ARRAY[0]"
true

всегда пытайтесьчтобы захватить один или несколько символов в противном случае, он вернул бы true для пустых строк, таких как ==, если бы вы использовали *

Также лучше привязать свой регулярное выражение ^, $, чтобы избежать частитекст для сопоставления.

0 голосов
/ 26 сентября 2019

Не могли бы вы попробовать следующее, это будет легко в awk, если вы согласны с этим.

awk -F'->| ' '$1==$4{print "true"}'  Input_file
...