用sed替换两个已知字符串之间的未知字符串

Cam*_* S. 24 regex bash sed

我有一个包含以下内容的文件:

WORD1 WORD2 WORD3

如何使用sed替换WORD1和WORD3之间的字符串foo,以便将文件内容更改为以下内容?:

WORD1 foo WORD3

我尝试了以下内容,但很明显我错过了一些东西,因为这不会产生预期的结果:

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

vye*_*rov 28

sed -i 's/WORD1.*WORD3/WORD1 foo WORD3/g' file.txt
Run Code Online (Sandbox Code Playgroud)

要么

sed -i 's/(WORD1).*(WORD3)/\1 foo \2/g' file.txt
Run Code Online (Sandbox Code Playgroud)

您可能需要转义圆括号,取决于您的sed变体.

  • @user3751385 转义 `(` 和 `)` (2认同)

pot*_*ong 7

这可能对你有用:

sed 's/\S\+/foo/2' file
Run Code Online (Sandbox Code Playgroud)

也许:

sed 's/[^[:space:]][^[:space:]]*/foo/2' file
Run Code Online (Sandbox Code Playgroud)

如果WORD1并且WORD3不止一次发生:

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
Run Code Online (Sandbox Code Playgroud)