查找长于x个字符的行并截断显示
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了查找长于x个字符的行并截断显示相关的知识,希望对你有一定的参考价值。
我想在html文件上运行grep以查找长于x个字符的行,并使用grep截断显示。
我知道的
在html文件中找出长于100个字符的行。
find . -name '*.html' -print | xargs grep -on '.\{100\}'
查找与title
匹配的行,并将显示限制为40个字符
find . -name '*.html' -print | xargs grep -onE '.{0,40}title.{0,40}'
我不知道的
如何查找超过100个字符的行,然后将这些行显示为限制为40个字符?
MVCE
我有一堆html文件,看起来像
$ cat 1.html
abcdefghijklmnopqrstuv12345675689
12345675689abcdefghijklmnopqrstuv
abcd1234
现在,我想查找超过20个字符的行,然后将显示切换为仅15个字符。
预计产量与favoretti solution
$ find . -name '*.html' -print | xargs grep -on '.\{20\}' | cut -c -15
./1.html:1:abcd
./1.html:2:1234
./2.html:1:abcd
./2.html:2:1234
答案
首先,值得一提的是,除非您非常有信心将“HTML”文件视为一系列行分隔记录,否则您应该使用支持HTML的工具(独立或包含在内脚本语言)。
既然您在之前的评论中提到过Awk:
find . -name '*.html' -exec awk '
length($0) > 20 { print FILENAME, substr($0, 1, 15) }' {} +
这将匹配长度大于20的行并打印前15个字符。我把文件名放在开头,你可以删除它,如果你喜欢。
目前尚不清楚是否需要使用find
进行递归搜索 - 如果没有,那么你可以使用shell生成文件列表:
awk 'length($0) > 20 { print FILENAME, substr($0, 1, 15) }' *.html
并且启用globstar
(shopt -s globstar
),您可以使用**/*.html
在Bash中进行递归匹配。
另一答案
如果由于某种原因你想要使用grep
find . -name '*.html' -exec grep -oP '.{40}(?=.{60})' {} /dev/null \;
另一答案
我想第一个grep工作正常,所以如果你想打印出40个字符,请通过cut
管道?
find . -name '*.html' -print | grep -on '.\{100\}' | cut -c 1-40
以上是关于查找长于x个字符的行并截断显示的主要内容,如果未能解决你的问题,请参考以下文章