gpt4 book ai didi

bash - 首先使用 sed 替换文件中的字符串

转载 作者:行者123 更新时间:2023-11-29 09:05:13 25 4
gpt4 key购买 nike

我想知道如何替换整个文件中第一次出现的搜索模式。例如,

import java.io.File;
import java.io.File;

应该替换为

import java.io.IOException;
import java.io.File;

如何使用 sed 实现此目的?谢谢你

最佳答案

当只需要替换就可以在一行中完成所有工作时,当然没有必要编写一些大而长的脚本。您只需为工作选择合适的电动工具。

这是一个 Perl 单行代码:

% cat -n /tmp/f
1 import java.lang.Character;
2 import java.io.File;
3 import java.io.File;
4 import java.util.Pattern;

% perl -pe 's//IoException/ if m?import java\.io\.\KFile?' /tmp/f
import java.lang.Character;
import java.io.IoException;
import java.io.File;
import java.util.Pattern;

如果你想对文件进行编辑,只需添加-i.bak:

% perl -i.bak -pe 's//IoException/ if m?import java\.io\.\KFile?' /tmp/f

% head /tmp/f{,.bak}
==> /tmp/f <==
import java.lang.Character;
import java.io.IoException;
import java.io.File;
import java.util.Pattern;

==> /tmp/f.bak <==
import java.lang.Character;
import java.io.File;
import java.io.File;
import java.util.Pattern;

之所以可行,是因为当您给 m// 运算符一个 ?? 定界符时,它有一些内置状态要记住第一次匹配仅。

然后在替代中,空模式意味着重复使用最后匹配的模式,所以你不必再次输入它而冒着两者不断转移的风险。

最后,模式中的 \K 违背了匹配项,将内容“保留”在左侧,这样它就不会被替代项吞噬。

关于bash - 首先使用 sed 替换文件中的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5742206/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com