Bash 如何在使用sed的特定单词之后替换文本?
输入文件sample.txtBash 如何在使用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
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等上工作)