我的文件的输入值格式为: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