使用 sed 替换行末的简单文本

使用 sed 替换行末的简单文本

我有该文本#!/usr/bin/env python,我想pythonpython3 (不使用正则表达式)替换它,但我想确保该文本位于行末。

我尝试了这个命令:

sed -i 's/python\n/python3\n/g' a.txt

但它不会替换文本。我使用十六进制转储确保后面python有 0x0a (\n)

请问我能做什么?

答案1

使用$not\n来匹配行尾:

sed -i 's/python$/python3/' a.txt

您不需要g修饰符(每行只能有一个行尾),但您可能希望将替换限制在文件的第一行,或者以 开头的行#!

sed -i '/^#!/s/python$/python3/' a.txt

默认情况下,sed 逐行读取输入,因此换行符本身永远不会包含在模式缓冲区中。但是,$正则表达式锚点表示行尾。

sed 的工作原理

相关内容