gpt4 book ai didi

linux - 如何将一个文件中的行替换到另一个文件中

转载 作者:太空宇宙 更新时间:2023-11-04 05:07:03 25 4
gpt4 key购买 nike

我有一个如下所示的文件,需要 grep 以 system_props(^system_props) 开头的行。

JAVA_HOME=`find "$AGENT_HOME/jre" -name release -type f 2>/dev/null | sed "s|/release||g"`

system_props="$system_props -sensu.controller.hostName=abc.nam.net"
system_props="$system_props -sensu.controller.port=8181"
system_props="$system_props -sensu.controller.node=Mcagent"

if [ -z "$JAVA_HOME" ]; then
if [ -d "/opt/middleware" ]; then
JAVA_HOME=`find /opt/middleware -type d -name jre 2>/dev/null | grep WebSphere | grep java | grep -v grep | sort | uniq`
fi
fi

我有另一个名为 file2 的文件,其中包含如下所示的虚拟内容。

JAVA_HOME=`find "$AGENT_HOME/jre" -name release -type f 2>/dev/null | sed "s|/release||g"`

system_props="$system_props -sensu.controller.hostName=testhost.net"
system_props="$system_props -sensu.controller.port=8080"

if [ -z "$JAVA_HOME" ]; then
if [ -d "/opt/middleware" ]; then
JAVA_HOME=`find /opt/middleware -type d -name jre 2>/dev/null | grep WebSphere | grep java | grep -v grep | sort | uniq`
fi
fi

现在我的要求是替换cat file1 | 的内容grep ^system_propscat file2 | grep ^system_props)

两个 system_props 值的预期输出应该相同,并附加 file1 中缺失的行

最佳答案

编辑:由于 OP 稍微改变了要求,因此在此处添加编辑后的解决方案。

awk  '
FNR==NR{
if(match($0,/^system_props=".*/)){
a[++count]=substr($0,RSTART+14,RLENGTH-14)
}
next
}
match($0,/^system_props="/){
$0=substr($0,RSTART,RLENGTH) a[++count1]
}
1;
END{
if(count!=count1){
while(++count1<=count){
print a[count1]
}
}
}
' File2 File1
<小时/><小时/>

您可以尝试关注吗?这将通过字符串 system_props 出现将 1 个文件中的值替换为另一个文件。这意味着 File2 中第一次出现的字符串将被放置在 File1 中第一次出现的字符串中。

awk  '
FNR==NR{
if(match($0,/^system_props=".*/)){
a[++count]=substr($0,RSTART+14,RLENGTH-14)
}
next
}
match($0,/^system_props="/){
$0=substr($0,RSTART,RLENGTH) a[++count1]
}
1
' Input_file2 Input_file1

对于您显示的示例,输出如下。

JAVA_HOME=`find "$AGENT_HOME/jre" -name release -type f 2>/dev/null | sed "s|/release||g"`

system_props="$system_props -sensu.controller.hostName=testhost.net"
system_props="$system_props -sensu.controller.port=8080"

if [ -z "$JAVA_HOME" ]; then
if [ -d "/opt/middleware" ]; then
JAVA_HOME=`find /opt/middleware -type d -name jre 2>/dev/null | grep WebSphere | grep java | grep -v grep | sort | uniq`
fi
fi

说明:为上述代码添加详细说明。

awk  '                                            ##Starting awk program from here.
FNR==NR{ ##Checking condition if FNR==NR which will be TRUE when file2 is being read.
if(match($0,/^system_props=".*/)){ ##Checking condition if line has system_props=" then do following.
a[++count]=substr($0,RSTART+14,RLENGTH-14) ##Creating array a with index variable count(whose value is increasing with 1) and its value is substring of current line with starting point of RSTART and ending point of RLENGTH.
}
next ##next will skip all further lines from here.
}
match($0,/^system_props="/){ ##Checking condition if a line starts from
$0=substr($0,RSTART,RLENGTH) a[++count1] ##Assigning substring of current line from RSTART to RLENGTH and putting value of array a which we collected from previous file.
}
1 ##1 will print edited/non-edited lines of Input_file1 here.
' File2 File1 ##Mentioning Input_file names here.

关于linux - 如何将一个文件中的行替换到另一个文件中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60259551/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com