如何使用 sed 替换特定单词后的文本?

Mah*_*ate 2 bash shell sed

输入文件sample.txt

some log file entries
some log file entries
Hostname:MyHostName
some log file entries
some log file entries
Run Code Online (Sandbox Code Playgroud)

我必须改变MyHostname字符串

该命令不起作用

sed -e 's/^Hostname: .*:/Hostname:mmphate/' sample.txt

sed -e 's/^Hostname: .*$/Hostname:mmphate/' sample.txt
Run Code Online (Sandbox Code Playgroud)

Zum*_*rio 5

对于你的情况,你可以从字面上做到:

sed -e 's/Hostname:MyHostName/Hostname:mmphate/g' sample.txt
Run Code Online (Sandbox Code Playgroud)

或者对于以“主机名:”开头的每一行:

sed -e 's/^Hostname:.*$/Hostname:mmphate/g' sample.txt
Run Code Online (Sandbox Code Playgroud)

如果您的主机名(示例中为 mmphate)位于变量中(例如 hostname_var),您可以执行:

sed -e "s/^Hostname:.*$/Hostname:$hostname_var/g" sample.txt
Run Code Online (Sandbox Code Playgroud)

注意:在这种情况下请注意双引号。


ali*_*dro 5

另一个简单版本

sed 's/\(Hostname:\).*/\1mmphate/' sample.txt
Run Code Online (Sandbox Code Playgroud)

如果您想使用 shell 变量中的主机名,您可以这样做。

$ export _myhost="My Host Name"
$ sed "s/\(Hostname:\).*/\1${_myhost}/" sample.txt
Run Code Online (Sandbox Code Playgroud)