如何从文件名中提取字符

如何从文件名中提取字符

我有一个包含文件名的列表。如何创建一个仅包含每行前 4 个字符的新列表?

答案1

您可以使用grep仅显示每行的前(最多) 4 个字符:

grep -Eo '^.{,4}' /PATH/TO/FILE

-E启用扩展正则表达式,这是这里的花括号量词所需要的。
-o使grep匹配的部分只输出,而不是找到它的整行

该模式^.{,4}与行首 ( ) 处由任意字符 ( ) 组成且长度最多为 4 个字符 ( )^的序列匹配。.{,4}

要将输出保存为文件,只需使用重定向:

grep -Eo '^.{,4}' /PATH/TO/FILE > /PATH/TO/OUTPUT-FILE

跟进:

对于匹配特定范围(从第 x 个字符到第 y 个字符)的通用模式,请考虑此示例,它显示每行的第 10 个到第 18 个字符:

$ echo 123456789abcdefghij | grep -Po '(?<=^.{9}).{8}'
abcdefgh

这是通过跳过前 9 个字符而不使用所谓的后视 ( (?<=...)) 进行匹配来实现的。此功能不包含在 理解的扩展正则表达式中grep,因此我们需要-P启用 PCRE。

跳过 9 个字符后,它将匹配接下来的 8 个字符。如果行比该字符短,它将不匹配。要再次匹配最多 8 个字符(如本答案的第一部分所示),请写入{,8}而不是{8}

相关内容