![如何从文件名中提取字符](https://linux22.com/image/1203870/%E5%A6%82%E4%BD%95%E4%BB%8E%E6%96%87%E4%BB%B6%E5%90%8D%E4%B8%AD%E6%8F%90%E5%8F%96%E5%AD%97%E7%AC%A6.png)
我有一个包含文件名的列表。如何创建一个仅包含每行前 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}
。