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

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

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

Связанный контент