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