J'ai un fichier avec le contenu suivant:
Word1 Word2 Word3
Comment puis-je utiliser sed pour remplacer la chaîne entre Word1 et Word3 par foo
, de sorte que le contenu du fichier soit modifié comme suit?:
Word1 foo Word3
J'ai essayé ce qui suit, mais il me manque évidemment quelque chose car cela ne produit pas les résultats souhaités:
sed -i '' 's/Word1.*Word3/foo/g' file.txt
sed -i 's/Word1.*Word3/Word1 foo Word3/g' file.txt
ou
sed -i 's/(Word1).*(Word3)/\1 foo \2/g' file.txt
Vous devrez peut-être vous échapper entre parenthèses, cela dépend de votre variante sed.
Cela pourrait fonctionner pour vous:
sed 's/\S\+/foo/2' file
ou peut-être:
sed 's/[^[:space:]][^[:space:]]*/foo/2' file
Si Word1
et Word3
se produit plusieurs fois:
echo "Word1 Word2 Word3 BLA BLA Word1 Word4 Word3" |
sed 's/Word3/\n&/g;s/\(Word1\)[^\n]*\n/\1 foo /g'
Word1 foo Word3 BLA BLA Word1 foo Word3
contenu d'un échantillon file.txt
$ cat file.txt
Word1 Word2 Word3
Word4 Word5 Word6
Word7 Word8 Word9
(Correction par @ DennisWilliamson en commentaire)$ sed -e 's/\([^ ]\+\) \+\([^ ]\+\) \+\(.*\)/\1 foo \3/' file.txt
Word1 foo Word3
Word4 foo Word6
Word7 foo Word9
tandis que awk
est en quelque sorte plus simple
$ awk -F' ' '{ print $1" foo "$3 }' file.txt
Word1 foo Word3
Word4 foo Word6
Word7 foo Word9