如何仅使用终端以编程方式编辑文件?

如何仅使用终端以编程方式编辑文件?

我希望编写一个 shell 脚本,通过该脚本我可以从命令中读取文件并编辑文件而无需人工干预(基于搜索一些文本并将其替换为另一个文本)。

我不需要为此使用任何文本编辑器...只需进行文本搜索(如使用 grep),然后用其他文本替换它并保存更改....

答案1

这就是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'

# 将“foo”替换为“bar”,除了包含“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

一些参考资料

答案2

回答很晚。不过,这可能会帮助其他有类似问题的人。

我建议创建并应用补丁。可以找到一个很好的例子 这里

例如,假设 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

答案3

如果要编辑文件,请使用文件编辑器,可以使用基于命令的文件编辑器,例如前任或者编辑

答案4

根据你需要编辑的内容,如果你vi熟悉ed可能会有用。

相关内容