Shell
使用 sed 將命令替換為行中的結果(命令輸出)
是否可以使用 sed 將某個正則表達式提取的命令替換為其輸出?
例如,我有下一個文件:
2 + 2 = $$shell:echo 2 + 2 | bc$$ // and "some unescaped text' here
我如何將其轉換為:
2 + 2 = 4 // and "some unescaped text' here
我發現可以提取命令並對其進行評估:
echo '2 + 2 = $$shell:echo 2 + 2 | bc$$ // and "some unescaped text' here | sed -e 's/.*\$\$shell:\(.*\)\$\$.*/\1/e' 4
但我不明白如何保留線路的其餘部分。
你可以使用 Perl…
perl -pe 's[\$\$shell:(.*?)\$\$][ qx($1) =~ s/\n$//r ]ge' < inputfile
(
qx
等效於命令替換,除了它不刪除尾隨換行符,所以它會這樣做=~ s/\n$//r
。周圍s[][]ge
只是替換中的 Perl 表達式的常用替換。)
醜,但是
$ echo '2 + 2 = $$shell:echo 2 + 2 | bc$$ // and some text here' | sed -e 's/\(.*\)\$\$shell:\(.*\)\$\$\(.*\)/printf "%s%s%s\n" "\1" "$(sh -c "\2")" "\3"/e' 2 + 2 = 4 // and some text here