одна команда для sed и дважды использовать входное значение в другой форме

У меня есть файл с входными значениями в виде: 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.

0
31.05.2017, 11:32
2 ответа

Вы можете сгруппировать части шаблона с помощью \(\), а затем ссылаться на него с помощью \1 (или \2 ... \9 если у вас больше групп в шаблоне):

s/input-prefix:\(.*\)/replace1-prefix:\1 replace2-prefix:\1/
1
28.01.2020, 02:45

Это также просто с несколькими значениями. Во-первых, вы можете пропустить команду 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.

0
28.01.2020, 02:45

Теги

Похожие вопросы