我有一个包含以下内容的文件:
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
出现不止一次:
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
whileawk
在某种程度上更简单
$ awk -F' ' '{ print $1" foo "$3 }' file.txt
WORD1 foo WORD3
WORD4 foo WORD6
WORD7 foo WORD9