我发现了一个使用命令行egrep
查找文本文件中最长的行,但我不太了解所有的语法,也不太了解它是如何工作的。
随着对这项技术的更好掌握,我可能能够调整它以适应其他任务。
我理解egrep
和,但我不明白和这两个字符-n
的用法。^.
$
有人可以分解以下命令吗?
egrep -n "^.{$(wc -L < filename)}$" filename
答案1
完整命令: egrep -n "^.{$(wc -L < filename)}$" filename
分解:
egrep
= 该egrep
程序搜索与模式匹配的行并打印它们。(类似于grep
)。相当于grep -E
将引号中的内容解释为扩展的正则表达式模式。
-n
=egrep 参数说明行号。
$(wc -L < filename)
-wc
是一个字数统计程序,用于打印文件中新行和内容的数量。 -L
是wc
最大行长度参数。 是将指定文件< filename
的全部内容传递到的命令。 是 Bashism(与程序和脚本语言相关的东西),是一种说法“在这里处理命令,然后将输出放在整个字符串的位置。该命令的其余部分似乎是正则表达式的一部分,加上传递到字符串中的输入,最终这只是匹配的模式。filename
wc
$( )
bash
egrep
"^.{
... }$"
= 这"
只是一种将该模式传递给的方法,egrep
而不会将其中的字符解释为 Bash 代码。其余部分是正则表达式模式。正则表达式是每个人都应该知道的东西。我使用正则表达式帮助我学习和理解正则表达式,并构建正则表达式模式。分解一下,^
是一个锚点,表示它与字符串的开头匹配。 .
表示下一个参数之前的换行符以外的任何字符。 {
并根据 RegExr 指示输出中的}
实际{
和字符。末尾是一个锚点,用于指示字符串的结尾。}
$