使用另一个文件中的模式替换文件中的字符串
Replacing strings in file, using patterns from another file
我需要使用另一个具有模式的文件(如字符串数据库)来替换许多文件中的许多字符串。用于匿名化文件。
示例:
文件#1:
"Administrator";"512";"Built-in account for administering the computer/domain";"False";"False";"Administrator";"True";"True";"True";"S-1-5-21-3445027559-693823181-3401817782-500";"User";"OK";"23. 1. 2012 9:41:34";"20. 1. 2012 16:01:33";"10";"True";*
文件 #2(模式文件):
Guest;user1
Administrator;user2
system;user3
文件 #1 中的输出需要是
"user2";"512";"Built-in account for administering the computer/domain";"False";"False";"user2";"True";"True";"True";"S-1-5-21-3445027559-693823181-3401817782-500";"User";"OK";"23. 1. 2012 9:41:34";"20. 1. 2012 16:01:33";"10";"True";
因为文件 #1 的内容是可变的,所以在我的情况下使用一些正则表达式不起作用。我尝试使用 grep
进行查找,但它也没有用。
到目前为止我试过这个
find file1.txt -type f -exec sed -f patt.regular {} \;
patt.regular
是这样的:
s/10.30.8.204/XX.YY.8.204/g
不幸的是它不起作用,我怀疑,源文件格式 file1.txt 有一些问题,因为什么都不会发生,但是当我删除原始文件 (file1.txt) 并创建新文件时, 好像还可以
sed
是否有可能出现格式问题?
在shell、
for line in $(cat file2.txt); do sed -i "s/$(echo $line | cut -d ';' -f 1)/$(echo $line | cut -d ';' -f 2)/g" file1.txt; done
做你想做的事。它需要将文件命名为 file1.txt
和 file2.txt
并驻留在当前目录中。
这会对 file2.txt
中的每一行执行 sed
。
我需要使用另一个具有模式的文件(如字符串数据库)来替换许多文件中的许多字符串。用于匿名化文件。
示例:
文件#1:
"Administrator";"512";"Built-in account for administering the computer/domain";"False";"False";"Administrator";"True";"True";"True";"S-1-5-21-3445027559-693823181-3401817782-500";"User";"OK";"23. 1. 2012 9:41:34";"20. 1. 2012 16:01:33";"10";"True";*
文件 #2(模式文件):
Guest;user1
Administrator;user2
system;user3
文件 #1 中的输出需要是
"user2";"512";"Built-in account for administering the computer/domain";"False";"False";"user2";"True";"True";"True";"S-1-5-21-3445027559-693823181-3401817782-500";"User";"OK";"23. 1. 2012 9:41:34";"20. 1. 2012 16:01:33";"10";"True";
因为文件 #1 的内容是可变的,所以在我的情况下使用一些正则表达式不起作用。我尝试使用 grep
进行查找,但它也没有用。
到目前为止我试过这个
find file1.txt -type f -exec sed -f patt.regular {} \;
patt.regular
是这样的:
s/10.30.8.204/XX.YY.8.204/g
不幸的是它不起作用,我怀疑,源文件格式 file1.txt 有一些问题,因为什么都不会发生,但是当我删除原始文件 (file1.txt) 并创建新文件时, 好像还可以
sed
是否有可能出现格式问题?
在shell、
for line in $(cat file2.txt); do sed -i "s/$(echo $line | cut -d ';' -f 1)/$(echo $line | cut -d ';' -f 2)/g" file1.txt; done
做你想做的事。它需要将文件命名为 file1.txt
和 file2.txt
并驻留在当前目录中。
这会对 file2.txt
中的每一行执行 sed
。