能否使用sed打印已更改的行号和行内容?
我只需要进行简单的文本替换,无需使用正则表达式:
sed -i "s:replace_me:replaced:" test.c
我需要用它来编写一个Bash脚本。
提前感谢!
你可以有几种选择:
使用文本编辑器,您可以交互地替换模式,编辑器会在每次替换之前提示。因此,您可以针对每种情况选择y
或n
。
$ vim file
:%s/pattern/replace/gc
使用diff命令,您可以轻松比较两个文件并查看更改:
$ sed 's/pattern/replace/g' file > tmpfile
$ diff -u file tmpfile
或者
$ diff -y file tmpfile
尝试使用man diff
来进行其他有趣的可视化操作。
当你确信一切都没问题后,执行以下操作:
$ mv tmpfile file
这是一个 POSIX 的扩展,但 cat -n file.txt | ...
是添加行号的优雅解决方案。
你可以尝试使用 sed
创建更新后的文件,将原始文件和更新后的文件都通过 cat -n
写入临时文件,然后比较两个文件的差异 diff -q
。
另一种方法是类似于 cat -n original.txt | sed -n 's/[ 0-9]{7} .*pattern.*/replacement/gp
。你需要运行两次替换,但当你对原始文件和更新后的文件进行编号和 diff
比较时,唯一的优点可能是 diff
可能被认为是更传统的技术。
-i
,但内部它会输出到临时文件并将其移回原始文件。 - ShellFish