32

次の内容のファイルがあります。

WORD1 WORD2 WORD3

fooファイルの内容が次のように変更されるように、sed を使用して WORD1 と WORD3 の間の文字列を に置き換えるにはどうすればよいですか?:

WORD1 foo WORD3

私は次のことを試しましたが、望ましい結果が得られないため、明らかに何かが欠けています:

sed -i '' 's/WORD1.*WORD3/foo/g' file.txt

4

3 に答える 3

43
sed -i 's/WORD1.*WORD3/WORD1 foo WORD3/g' file.txt

また

sed -i 's/(WORD1).*(WORD3)/\1 foo \2/g' file.txt

sed バリアントによっては、丸括弧をエスケープする必要がある場合があります。

于 2012-05-16T07:13:21.243 に答える
7

これはあなたのために働くかもしれません:

sed 's/\S\+/foo/2' file

多分:

sed 's/[^[:space:]][^[:space:]]*/foo/2' file

WORD1WORD3が複数回発生する場合:

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
于 2012-05-16T10:02:31.133 に答える
3

サンプル内容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

whileawkはなんとなく簡単です

$ awk -F' ' '{ print $1" foo "$3 }' file.txt

WORD1 foo WORD3
WORD4 foo WORD6
WORD7 foo WORD9
于 2012-05-16T08:24:17.953 に答える