how to use xargs with sed in search pattern

54,413

Solution 1

Use command substitution instead, so your example would look like:

sed -i "s/$(echo "some pattern")/replacement/g" file.txt

The double quotes allow for the command substitution to work while preventing spaces from being split.

Solution 2

You need to tell xargs what to replace with the -I switch - it doesn't seem to know about the {} automatically, at least in some versions.

echo "pattern" | xargs -I '{}' sed -i 's/{}/replacement/g' file.txt

Solution 3

this works on Linux(tested):

find . -type f -print0 | xargs -0 sed -i 's/str1/str2/g' 

Solution 4

This might work for you (GNU sed):

echo "some pattern" | sed 's|.*|s/&/replacement/g|' | sed -f - -i file.txt

Essentially turn the some pattern into a sed substitution command and feed it via a pipe to another sed invocation. The last sed invocation uses the -f switch which accepts the sed commands via a file, the file in this case being the standard input -.

If you are using bash, the here-string can be employed:

<<<"some pattern" sed 's|.*|s/&/replacement/g|' | sed -f - -i file.txt

N.B. the sed separators | and / should not be a part of some pattern otherwise the regexp will not be formed properly.

Share:
54,413

Related videos on Youtube

Neuquino
Author by

Neuquino

SOreadytohelp just ask me what you want to know

Updated on July 16, 2020

Comments

  • Neuquino
    Neuquino almost 4 years

    I need to use the output of a command as a search pattern in sed. I will make an example using echo, but assume that can be a more complicated command:

    echo "some pattern" | xargs sed -i 's/{}/replacement/g' file.txt
    

    That command doesn't work because "some pattern" has a whitespace, but I think that clearly illustrate my problem.

    How can I make that command work?

    Thanks in advance,

  • wyde19
    wyde19 almost 5 years
    It's not what was asked. Author could've invented simplified example to better isolate the logic he asked about. Furthermore, this question is visited by the people searching how to use sed inside xargs specifically (because of the question title) and this does not provide answer to that.
  • geoidesic
    geoidesic about 2 years
    Also doesn't seem to work e.g. sed -i "s/$(echo "grep 'A temporary password' /var/log/mysqld.log | grep --line-buffered -oE '.{0,0}localhost:.{0,13}.' | tail -c 13")/replacement/g" ./mysecure.exp