次の内容のファイルがあります。
Word1 Word2 Word3
ファイルの内容が次のように変更されるように、sedを使用してWord1とWord3の間の文字列をfoo
に置き換えるにはどうすればよいですか?:
Word1 foo Word3
私は次のことを試しましたが、それが望ましい結果をもたらさないので、明らかに何かが欠けています:
sed -i '' 's/Word1.*Word3/foo/g' file.txt
sed -i 's/Word1.*Word3/Word1 foo Word3/g' file.txt
または
sed -i 's/(Word1).*(Word3)/\1 foo \2/g' file.txt
Sedバリアントによっては、丸括弧をエスケープする必要がある場合があります。
これはあなたのために働くかもしれません:
sed 's/\S\+/foo/2' file
多分:
sed 's/[^[:space:]][^[:space:]]*/foo/2' file
Word1
およびWord3
は2回以上発生します。
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
サンプルの内容_file.txt
_
_$ cat file.txt
Word1 Word2 Word3
Word4 Word5 Word6
Word7 Word8 Word9
_
( @ DennisWilliamson コメントによる修正)$ sed -e 's/\([^ ]\+\) \+\([^ ]\+\) \+\(.*\)/\1 foo \3/' file.txt
_Word1 foo Word3
Word4 foo Word6
Word7 foo Word9
_
awk
はやや単純ですが
_$ awk -F' ' '{ print $1" foo "$3 }' file.txt
_
_Word1 foo Word3
Word4 foo Word6
Word7 foo Word9
_