输入文件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
答案 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