У меня есть файл с входными значениями в виде: input-prefix: значение
.
Мне нужно дважды заменить 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 для любой помощи,
W.
Вы можете сгруппировать части шаблона с помощью \(\)
, а затем ссылаться на него с помощью \1
(или \2
... \9
если у вас больше групп в шаблоне):
s/input-prefix:\(.*\)/replace1-prefix:\1 replace2-prefix:\1/
Это также просто с несколькими значениями. Во-первых, вы можете пропустить команду cat в вашем канале, так как sed будет читать из файла и печатать его вывод в STDOUT
. И sed
работает так, как это описал @Philippos (и \1
будет использоваться дважды, так как он принадлежит первой группе захвата). Просто удалите эхо в команде xargs, чтобы запустить вашу команду. Если вы хотите увидеть вызванную команду, вы можете добавить параметр -t
, чтобы увидеть команду, или -p
, чтобы выполнить ее в интерактивном режиме. Поэтому вам нужно указать да/нет перед запуском команды.
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
Краткое примечание: предполагается, что ваш входной префикс — это первое, что вы хотите заменить в строке, а значение — это вся остальная часть строки после двоеточия. Также модификатор g
в команде sed
заменит все вхождения вашего input-prefix:
в inputfile.txt
.