如何使用sed替换filetobeprocessed.txt中的文本,
,其名称和电话号码可能在其中:
table_open_cache
以每行为单位包含文本。要查找的文本存在于fileA.txt中,替换字符串位于fileB.txt中。
例如,fileA.txt
可能有
Name3 john.D,
和fileB.txt 可能有
人:John Diamen,
所以filetobeprocessed.txt应该成为:
Name3 john.D
Name6 mary.D
Name7 kelly.O
etc
当然,由于要处理的文件,fileA和fileB都很大,我们可能在搜索字符串和替换字符串中找到任何字符,所以我的示例是基本的,并不涵盖所有字符存在于filetobeprocessed.txt中 所以我需要一种方法,使用sed来进行搜索和替换,但是对于fileA.txt中找到的每一行及其等效字符串,在fileB.txt中找到相同的数字行
结合
Person: John Diamen
Name6 mary.D
Name7 kelly.O
或
要替换的sed的/ \ string \ b /替换字符串/ g'file.xml
我找不到的,是一种方法,用于fileA.txt的每一行,其中包含要搜索的所有字符串,以及每个相应的替换行,可在fileB.txt中找到
答案 0 :(得分:0)
在awk中:
$ awk '
NR==FNR { # hash the first file to a
a[$0]=$0; next }
{
if(FNR in b) { # process the third file to b
b[b[FNR]]=$0
delete b[FNR] }
else b[FNR]=$0 # process the second file to b
}
END { # after all files are processed and in memory
for(i in a) # go thru all entries of first file
if(i in b) # if entry found in second file
print b[i] # replace with the value of third file
else
print a[i] # otherwise print the entry from the first file
}' filetobeprocessed.txt fileA.txt fileB.txt # mind the order
Name6 mary.D
Person: John Diamen
Name7 kelly.O
答案 1 :(得分:0)
要求不明确,但这样的事情可能有效。
示例文件
==> file <==
Name1 2377
Name2 2910
Name3 8458
Name4 1522
Name5 5855
Name6 1934
Name7 8106
Name8 1735
Name9 4849
Name10 1518
==> fileA <==
Name3
Name7
==> fileB <==
Person: John Smith
Person: Mr Brown
$ awk -F'\t' 'NR==FNR {a[$1]=$2; next}
$1 in a {$1=a[$1]}1' <(paste fileA fileB) FS='[[:space:]]' file
Name1 2377
Name2 2910
Person: John Smith 8458
Name4 1522
Name5 5855
Name6 1934
Person: Mr Brown 8106
Name8 1735
Name9 4849
Name10 1518
这假定查找文件fileA
和fileB
不是太大,因为对要替换的file
假设替换文本中没有特殊字符
,可以使用sed
完成相同的操作
$ sed -f <(paste fileA fileB | sed -r 's_(.*)\t(.*)_s/\1/\2/_') file