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