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

时间:2017-03-22 08:55:40

标签: bash shell sed

输入文件sample.txt

some log file entries
some log file entries
Hostname:MyHostName
some log file entries
some log file entries

我必须更改MyHostname字符串

此命令无效

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

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

4 个答案:

答案 0 :(得分:3)

您的模式中有:Hostname: .*:)。试试这个:

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

答案 1 :(得分:3)

另一个简单的版本

sed 's/\(Hostname:\).*/\1mmphate/' sample.txt

如果要使用shell变量中的主机名,可以执行此操作。

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

答案 2 :(得分:2)

在您的情况下,您可以按字面意思执行:

sed -e 's/Hostname:MyHostName/Hostname:mmphate/g' sample.txt

或者以"主机名:":

开头的每一行
sed -e 's/^Hostname:.*$/Hostname:mmphate/g' sample.txt

如果你的主机名(在你的例子中是mmphate)在一个变量(例如hostname_var)中,你可以执行:

sed -e "s/^Hostname:.*$/Hostname:$hostname_var/g" sample.txt

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

答案 3 :(得分:2)

如果你对Perl没问题:这会将线分为两部分,第一部分是Hostname:,第二部分是其余部分。第一部分将被称为$1,而第N部分将被称为$N。检查反向引用。

perl -lnpe 's/(Hostname:)(.*)/$1 blabla/' input
some log file entries
some log file entries
Hostname: blabla
some log file entries
some log file entries

或者您可以使用:

awk 'BEGIN{FS=OFS=":"} /Hostname/{$2="blabla"}1' input