我有两个文件,它们的行号不相同。但我想替换使用命令file1
引用的行。file2
sed
在file1
:
tid.infno := 72
tid.setnr := 120 (This number 120 is wrong and It will be 110)
tid.typeidc := 2
tid.typeidm := 1
writedb
clear
在file2
:
tid.setnr := 110 (This is correct and I want to place this number in file no. 1)
答案1
一个awk
办法:
awk 'FNR==NR&&$1=="tid.setnr"{x=$3} NR!=FNR{if($1=="tid.setnr"){$3=x}print}' file2 file1
- 第一部分:
FNR==NR&&$1=="tid.setnr"{x=$3}
:运行file2
并搜索,如果找到值为 ( ) 的tid.setnr
变量。x
110
- 第二部分:
NR!=FNR{if($1=="tid.setnr"){$3=x}print}
:运行 troughtfile1
,搜索tid.setnr
,如果找到,则将第三个字段 ($3
) 替换为其他文件中找到的数字。
答案2
首先从 file-2 中提取数字并将其保存为变量:
correctNo=`grep -oP "setnr\s\:\=\s\K\d+" file2.txt`
然后替换 file-1 中的这个数字:
sed -re "s/(setnr\s\:\=\s)([0-9]+)/\1$correctNo/g" file1.txt
答案3
这个怎么样:
$ for line in `cat file2.txt`; do
pattern= `sed "s/\s*:=.*//"`
sed "s/$pattern.*/$line/" file1.txt > file3.txt
done
该代码将使用 file1.txt 中的行创建 file3.txt,任何与 file2.txt 中的模式匹配的行都将替换为 file2.txt 中的行
我在这里做了很多假设...上面将在 file1 中查找“tid.setnr”并将整行替换为 file2.txt 中的行