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

Bash 如何在使用sed的特定单词之后替换文本?,bash,shell,sed,Bash,Shell,Sed,输入文件sample.txt some log file entries some log file entries Hostname:MyHostName some log file entries some log file entries 我必须更改MyHostnamestring 此命令不起作用 sed -e 's/^Hostname: .*:/Hostname:mmphate/' sample.txt sed -e 's/^Hostname: .*$/Hostname:mmphat

输入文件sample.txt

some log file entries
some log file entries
Hostname:MyHostName
some log file entries
some log file entries
我必须更改
MyHostname
string

此命令不起作用

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

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

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

sed -e 's/Hostname:MyHostName/Hostname:mmphate/g' sample.txt
或对于以“主机名:”开头的每一行:

如果您的主机名(示例中为mmphate)在一个变量(例如hostname_var)内,您可以执行:

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

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

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

sed -e 's/Hostname:MyHostName/Hostname:mmphate/g' sample.txt
或对于以“主机名:”开头的每一行:

如果您的主机名(示例中为mmphate)在一个变量(例如hostname_var)内,您可以执行:

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

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

您的模式中有2个
主机名:.*:
)。试试这个:

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

模式中有2个
主机名:.*:
)。试试这个:

sed -e 's/^Hostname:.*/Hostname:mmphate/' sample.txt
另一个简单的版本

sed 's/\(Hostname:\).*/\1mmphate/' sample.txt
如果要使用shell变量中的主机名,可以这样做

$ export _myhost="My Host Name"
$ sed "s/\(Hostname:\).*/\1${_myhost}/" sample.txt
另一个简单的版本

sed 's/\(Hostname:\).*/\1mmphate/' sample.txt
如果要使用shell变量中的主机名,可以这样做

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

如果您对
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

如果您对
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

你有什么问题?
sed的/^Hostname:.*/Hostname:mmphate/'文件
你有什么问题?
sed的/^Hostname:.*/Hostname:mmphate/'文件
但我们不知道主机名后的单词:@MaheshPhate用变量用法编辑但我们不知道主机名后的单词:@MaheshPhate用变量用法编辑我们如何定义变量insted我们如何定义变量而不是1Mmpatteworth要提到的Perl解决方案可以正常工作,并且在配备Perl的各种机器上也可以工作,而sed解决方案只能与GNU sed一起工作(因此不能在自由/开放的bsd、mac os等上工作)值得一提的是,Perl解决方案可以正常工作,并且在配备Perl的各种机器上也可以正常工作,而sed解决方案只能与GNU sed一起工作(因此不能在自由/开放的bsd、mac os等上工作)