开发者

output of one command is argument of another

Is there any way to fit in 1 line using the pipes the following:

output of

sha1sum $(xpi) | grep -Eow '^[^ ]+'

goes instead of 456

sed 's/@version@/456开发者_如何学Go/' input.txt > output.txt


Um, I think you can nest $(command arg arg) occurances, so if you really need just one line, try

 sed "s/@version@/$(sha1sum $(xpi) | grep -Eow '^[^ ]+')/" input.txt \
     > output.txt

But I like Trey's solution putting it one two lines; it's less confusing.


This is not possible using pipes. Command nesting works though:

sed 's/@version@/'$(sha1sum $(xpi) | grep -Eow '^[^ ]+')'/' input.txt > output.txt

Also note that if the results of the nested command contain the / character you will need to use a different character as delimiter (#, |, $, and _ are popular ones) or somehow escape the forward slashes in your string. This StackOverflow question also has a solution to the escaping problem. The problem can be solved by piping the command to sed and replacing all forward slashes (for escape characters) and backslashes (to avoid conflicts with using / as the outer sed delimiter).

The following regular expression will escape all \ characters and all / characters in the command:

sha1sum $(xpi) | grep -Eow '^[^ ]+' | sed -e 's/\(\/\|\\\|&\)/\\&/g'

Nesting this as we did above we get this solution which should properly escape slashes where needed:

sed 's/@version@/'$(sha1sum $(xpi) | grep -Eow '^[^ ]+'  | sed -e 's/\(\/\|\\\|&\)/\\&/g')'/' input.txt > output.txt

Personally I think that looks like a mess as one line, but it works.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜