grep —删除定界符标记后的文本


12

我有一个文件,需要删除;每行第一行之后的所有内容。

所以这样的文件:

sdfsdsdf;
fsdfsddf;sdfsd;

将导致以下结果:

sdfsdsdf
fsdfsddf

我调查了grepsed。我将不胜感激地结合了这两个命令中的任何一个。

Answers:


5

sed 在这种情况下,它可能比awk或perl更简单,最快:

sed 's/^\([^;][^;]*\);.*$/\1/' some_file_name

6
这比应该的要复杂!sed 's/;.*//'
吉尔斯(Gilles)“所以

我不敢苟同。perl -pe's /;.*//'some_file_name一样简单,并且在处理大文件时可以说快了1500%。
代码头

我有几个可以使用sed但不能使用perl的系统,因此我建议在足够的地方使用重量更轻的解决方案。
dubiousjim 2012年

7

另一个选择是使用cut命令

cat a.file | cut -d';' -f1

9
猫没用了我们

3

我通常用这样awk的东西:

cat a.file | awk -F=";" '{ print $1 }'

这将占用文件的每一行,并在定界符之前打印第一组 -F


7
无用的cat
暂停,直到另行通知。

1
第二丹尼斯。在linux和BSD下,-F =“;” 不能按预期工作。而且您可能也想引用$ 1:awk -F“;” '{print $ 1}'
a.file

2

这是使用GNU的一种方法grep

grep -Po "^[^;]+(?=;?)" filename

如果没有Gnu grep:grep -Eo '^[^;]+;' filename几乎可以理解,它只会打印一个字符太多。grep -Eo '^[^;]+' filename几乎也可以得到它,但它还会打印没有任何内容的完整(非空)行;
dubiousjim 2012年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.