查找长于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

并且启用globstarshopt -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个字符的行并截断显示的主要内容,如果未能解决你的问题,请参考以下文章

Python在文件中查找字符串,编辑行并保存到新文件

查找具有延期日期范围的行并累积其持续时间

如何在文本文件中查找行并导出行号

grep命令文本过滤

bash技巧

Pandas - 在两列中查找具有匹配值的行并在另一列中相乘