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 如需任何帮助,

W.

答案1

您可以将模式的各个部分分组为\(\),然后通过\1(或者\2...\9如果模式中有更多组)来引用它:

s/input-prefix:\(.*\)/replace1-prefix:\1 replace2-prefix:\1/

答案2

它也很简单,具有多个值。首先,您可以跳过管道中的 cat 命令,因为 sed 将从文件中读取并将其输出打印到STDOUT.并sed以 @Philippos 描述的方式工作(并且\1将使用两次,因为它属于第一个捕获组)。只需删除 xargs 命令中的 echo 即可运行命令。如果您想查看调用的命令,可以添加参数-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

相关内容