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

相關內容