我想编辑某个目录下所有一行或多行长度超过一定阈值的文本文件。我该怎么做?
为了简单起见,我们假设目录及其子目录中的所有文本文件都具有相同的文件扩展名 - 比如说.java
。
PS 我选择的编辑器是 emacs。
答案1
如果您不想递归到子目录,那么这样做就更简单了:
grep -lZ '.\{116\}' *.java | xargs -0 "${EDITOR:=emacs}"
如果需要递归到子目录,请使用以下globstar
选项:
shopt -s globstar
grep -lZ '.\{116\}' **/*.java | xargs -0 "${EDITOR:=emacs}"
答案2
在终端中,切换到相关目录后,输入:
find -name '*.java' -exec awk -vORS=$'\\0' 'length > 116 {print FILENAME; nextfile}' {} +|xargs -0 ${EDITOR:=emacs}
这将.java
在新的 emacs 实例中打开所有行长度超过 116 个字符的文件 - 除非您的 EDITOR 环境变量设置为其他文本编辑器的名称,在这种情况下它将在该编辑器中打开它们。
答案3
根据 gniourf_gniourf 的回答,这里有一种在 emacs 中有效的方法,它允许您直接跳转到带有TAB
的过长行RET
:
M-x rgrep RET .\{116\} RET *.java RET [insert directory to scan here] RET