【问题标题】:Replacing strings in file, using patterns from another file使用另一个文件中的模式替换文件中的字符串
【发布时间】:2015-05-11 08:40:38
【问题描述】:

我需要使用另一个带有模式的文件(如字符串数据库)替换许多文件中的许多字符串。它用于匿名文件。

例子:

文件#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 是否有可能出现格式问题?

【问题讨论】:

  • 请添加您目前尝试过的内容,以便我们开始。此外,我们或许能够在您自己的尝试中指出您做错了什么。

标签: regex replace grep anonymize


【解决方案1】:

在外壳中,

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.txtfile2.txt 并驻留在当前目录中。

这对file2.txt 中的每一行执行sed

【讨论】:

  • 是的,看起来不错。谢谢现在我必须解决其他格式,问题
猜你喜欢
  • 2019-03-21
  • 2011-07-01
  • 1970-01-01
  • 1970-01-01
  • 2018-05-19
  • 1970-01-01
  • 1970-01-01
  • 2013-06-23
  • 2012-08-18
相关资源
最近更新 更多