说我有这个文件:
cat > test.txt <<EOF
line one word
line two word
line three word
line one two word
EOF
Run Code Online (Sandbox Code Playgroud)
让我们说我想用'TWO'替换所有单词'two',在文件中就地内联 .test.txt
现在,我所做的通常是构建一个"预览"(-n不打印行,然后使用/p- 仅打印匹配的行):
$ sed -n 's/two/TWO/gp' test.txt
line TWO word
line one TWO word
Run Code Online (Sandbox Code Playgroud)
...然后我通常执行实际的就地替换(有-i和没有/p):
$ sed -i 's/two/TWO/g' test.txt
$ cat test.txt
line one word
line TWO word
line three word
line one TWO word
Run Code Online (Sandbox Code Playgroud)
有没有办法sed在一个文件中就地更改行,并从一个命令行打印更改的行到stdout?
在Linux上,您可以逃脱:
sed -i '/two/{s/two/TWO/g; w /dev/stdout}' test.txt
Run Code Online (Sandbox Code Playgroud)
在BSD系统(包括Mac OS X)上,sed关于何时可以将动作组合到一行上有一些略微古怪的规则,我不得不使用:
sed -i '/two/{s/two/TWO/g; w /dev/stdout
}' test.txt
Run Code Online (Sandbox Code Playgroud)