У меня есть файл с входными значениями в виде: input-prefix:value
.
Мне нужно заменить input-prefix
дважды на другую замену и передать это команде типа my-command replace1-prefix:value replace2-prefix:value
. Возможно ли это с помощью одной команды или мне нужно написать скрипт?
С одним значением все просто
cat my-input-file | sed 's/input-prefix/replace1-prefix/' | xargs -r my-command
TIA за любую помощь,
В.
решение1
Вы можете сгруппировать части шаблона с помощью \(\)
и позже ссылаться на него с помощью \1
(или \2
... \9
если у вас в шаблоне несколько групп):
s/input-prefix:\(.*\)/replace1-prefix:\1 replace2-prefix:\1/
решение2
Это также просто с несколькими значениями. Во-первых, вы можете пропустить команду cat в вашем конвейере, так как sed будет читать из файла и выводить свой вывод в STDOUT
. И sed
работает так, как описал @Philippos (и \1
будет использоваться дважды, так как принадлежит к первой группе захвата). Просто удалите echo в команде xargs, чтобы запустить вашу команду. Если вы хотите увидеть вызванную команду, вы можете добавить параметр, -t
чтобы увидеть команду или -p
выполнить ее интерактивно. Поэтому вам нужно указать yes/no перед запуском команды.
user@pc:/tmp$ cat inputfile.txt
input-prefix1:value1
input-prefix:value
input-prefix2:value2
user@pc:/tmp$ sed 's/^input-prefix:\(.*\)$/replace1-prefix:\1\nreplace2-prefix:\1/g' inputfile.txt
input-prefix1:value1
replace1-prefix:value
replace2-prefix:value
input-prefix2:value2
user@pc:/tmp$ sed 's/^input-prefix:\(.*\)$/replace1-prefix:\1\nreplace2-prefix:\1/g' inputfile.txt | xargs -r echo my-command
Краткое примечание: Это предполагает, что ваш input-prefix — это первое, что вы хотите заменить в строке, а значение — это вся остальная часть строки после двоеточия. Также модификатор g
в sed
команде заменит все вхождения вашего input-prefix:
в пределах inputfile.txt
.