当前位置: 首页 > 知识库问答 >
问题:

从一行中替换多个单词。txt文件[重复]

靳彦
2023-03-14

我正在尝试替换txt文件中的多个单词。

有两行的示例如下:

phone number: 123 addr: xyz
phone no: 456 home address: abc 

假设我想用phonenum和addr替换“phone number”和“phone no”

目前我只知道如何运行多个sed命令,我正在寻找一些指导来找到一种更有效的方法。

谢谢你!

共有1个答案

韦星文
2023-03-14

使用Perl,使用散列,散列的键是要替换的单词,值是它们所需的替换。连接到管道上的键串用作替换操作符s///g中的模式,使用/g修饰符可以对每行启用多个替换。

echo "phone number: 123 addr: xyz\nphone no: 456 home address: abc" > in.txt

perl -lpe '
BEGIN {
    %re = (
        q{phone number}  => q{phonenum},
        q{phone no}      => q{phonenum},
        q{addr}          => q{address1},
        q{address}       => q{address1},
    );
    $re_str = join q{|}, keys %re; # "phone number|phone no|addr|address"
}
s/\b($re_str)\b/$re{$1}/g;
' in.txt > out.txt

在文件out.txt中输出:

phonenum: 123 address1: xyz
phonenum: 456 home address1: abc

Perl one liner使用以下命令行标志:
-e:告诉Perl在线查找代码,而不是在文件中
-p:在输入上一次循环一行,默认情况下将其分配给$\uu。在每次循环迭代后添加print$\uz
-l:在内联执行代码之前,先去掉输入行分隔符(“\n”,默认为*NIX),然后在打印时附加它。

q{…} :指定单引号字符串的另一种方法(“…”在这里不使用,因为它们必须在单引号Perl one liner中转义)。

s/\b($re\u str)\b/$re{$1}/g:在$re_str周围的括号将模式捕获到$1变量\b表示分词,即单词的开头或结尾。根据评估顺序,需要添加\b以防止将家庭地址替换为家庭地址

另请参见:
perldoc perlrun:如何执行Perl解释器:命令行开关
perldoc perlre:Perl正则表达式(正则表达式)
perldoc perlRequest:Perl正则表达式快速启动

 类似资料:
  • 我想替换字符串中的一些单词。我有可行的解决方案,但我认为这不是最好的。你能帮我做些更有效的事情吗 代码是avaiable在这里:https://codepen.io/yasAFE/pen/BYOVme

  • 我正在从文本文件中读取预订系统的座位数据,并将其写入ArrayList中。一个行将被放入一个可变的fileline中。文件行是从每个“,”中拆分出来的,并放入名为Components的数组中。然后将组件放入对象中。 txt文件示例 然后进入一个if语句,检查座位是否合适,如果合适,我想将false更改为true,并将乘客名添加为null,但只在合适的座位上。我想知道是否有任何方法可以覆盖文本文件中

  • 问题内容: 我有一个文件(更具体地说是一个log4j配置文件),我希望能够读取该文件并在代码中挑选出某些行并替换它们。例如,在文件中,有一串文本,指示文件的存储目录或记录器的级别。我希望能够替换这些文本字符串而无需读入文件,将其写入另一个文件以及删除原始文件。有没有一种使用Java来查找和替换文件中文本的更有效方法? 这是我尝试使用的文本文件的示例: 我希望能够读取文件并将’DEBUG’替换为另一

  • 当我试图计算一个单词在TXT文件中出现的次数时,我遇到了一个问题。 我创建一个textfield(txta) 我创建一个按钮来应用操作(btn) 我创建一个textarea(区域),其中显示文件的内容

  • 在这里你可以看到我正在处理的一些文件。 与我最相似的问题是这个问题(将一个文本文件文件夹合并到一个CSV中,每个内容都在一个单元格中),但我无法实现那里提出的任何解决方案。 我尝试的最后一个是Nathaniel Verhaaren在前面提到的问题中提出的Python代码,但我得到了与问题作者完全相同的错误(即使在实施了一些建议之后): 与我类似的其他问题(例如,Python:将多个。txt文件解析

  • 问题内容: 有没有办法替换放置在HTML正文中的table元素内的普通文本? 喜欢用“ hi”代替“ hello”吗? 请仅使用不带 jQuery的* JavaScript 。 * 问题答案: 要用另一个字符串替换HTML中的字符串,请使用innerHTML的replace 请注意,这将替换整个正文的第一个实例,包括HTML代码中的任何实例(例如,类名等。),因此请谨慎使用- 为了获得更好的结果,