我希望编写一个shell脚本,使我可以从命令中读取文件并编辑文件而无需人工干预(基于搜索一些文本并将其替换为其他文本)。
我不需要为此使用任何文本编辑器。...简单地进行文本搜索(例如使用grep),然后将其替换为其他文本并保存更改。
我希望编写一个shell脚本,使我可以从命令中读取文件并编辑文件而无需人工干预(基于搜索一些文本并将其替换为其他文本)。
我不需要为此使用任何文本编辑器。...简单地进行文本搜索(例如使用grep),然后将其替换为其他文本并保存更改。
Answers:
那就是sed
发挥作用的地方。一个sed
命令的格式如下:
[pattern1][,pattern2][!] command [args]
它使用正则表达式,因此可能/会有些困难。一些基本示例摘自下面的第二个链接:
#每行用“ bar”替换(查找并替换)“ foo” sed's / foo / bar /'#仅替换一行中的第一个实例 sed's / foo / bar / 4'#仅替换一行中的第4个实例 sed's / foo / bar / g'#替换一行中的所有实例 sed's / \(。* \)foo \(。* foo \)/ \ 1bar \ 2 /'#替换倒数第二个字母 sed's / \(。* \)foo / \ 1bar /'#仅替换最后一种情况 #仅将包含“ baz”的行替换为“ foo”和“ bar” sed'/ baz / s / foo / bar / g' #用“ bar”代替“ foo”,但包含“ baz”的行除外 sed'/ baz /!s / foo / bar / g' #将“ scarlet”或“ ruby”或“ puce”更改为“ red” sed's / scarlet / red / g; s / ruby / red / g; s / puce / red / g'#大多数sed gsed's / scarlet \ | ruby \ | puce / red / g'#仅GNU sed
一些参考
答案很晚。但是,这可能会帮助其他遇到类似问题的人。
我建议创建和应用补丁。一个很好的例子可以在这里找到 。
例如,假设new.txt文件包含要应用于old.txt的更改。您可以在终端上执行命令,也可以通过创建和执行patch_file.sh来执行命令。
命令行:打开终端并复制并执行以下行(必要时更改文件名):
diff old.txt new.txt > patch.patch # to create the patch
patch old.txt -i patch.patch -o patched_old.text # to apply patch
脚本:使用.sh文件方法。在终端机(键盘:ctrl + alt + t:
gedit patch_file.sh
将将在终端上执行的命令复制并粘贴到.sh文件中,并将其粘贴到标题下方,如下所示(gedit)。
#!/bin/sh
diff old.txt new.txt > patch.patch # to create the patch
patch old.txt -i patch.patch -o patched_old.text # to apply patch
使脚本可执行(终端):
chmod +x patch_file.sh
运行脚本(终端):
./patch_file.sh # may require sudo access depending on the directory affected