как добавить новое слово перед конкретным словом с помощью регулярного выражения - PullRequest
0 голосов
/ 25 июня 2018

мой исходный файл, как показано ниже:

import a.b.c.io.AA
import a.b.c.util.io.anc;

Я хочу добавить util перед конкретным словом io , которым слово перед ним не является util .

это мой ожидаемый выходной файл:

import a.b.c.io.AA
import a.b.c.util.io.anc;

Я пробую этот скрипт:

find . -name "a.java"|xargs sed -ie 's/import.*[^u][^t][^i][^l].io.*/import.*.util.io*/' but dont get what I want.

Ответы [ 2 ]

0 голосов
/ 25 июня 2018

Не могли бы вы попробовать и дайте мне знать, если это поможет вам.

awk '/io/ && !/util\.io/{sub(/io/,".util.&");} 1'  Input_file

Если вы хотите сохранить выходные данные в сам файл Input_file, добавьте > temp_file && mv temp_file Input_file к вышеуказанному коду.

0 голосов
/ 25 июня 2018

Вы можете смоделировать простое условное условие if-else, используя команду b

$ sed -e '/util\.io/b' -e 's/\.io/.util&/' ip.txt
import a.b.c.util.io.AA
import a.b.c.util.io.anc;
  • b - это инструкция перехода для перехода к данной метке - если метка не указана, она пропускает остатокСценарий sed и запускает следующий цикл
  • /util\.io/b, если строка содержит util.io, запустить следующий цикл
  • s/\.io/.util&/ для остальных строк, выполните эту подстановку
    • Используйте /^import/ s/\.io/.util&/ для замены только в строках, начинающихся с import


Также, вы можете использовать -exec с find вместо xargs -это то, для чего была создана команда, чтобы воздействовать на найденные файлы

find . -name '*.java' -exec sed -i <...> {} +

Некоторые версии могут не поддерживать {} +, и в этом случае используйте {} \;.См. Также Описание параметра -exec команды find

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...