我有一个包含矩阵的文件。例如,我有:如何使用Linux命令(sed?)删除文件中的特定行?
1 a 2 b
2 b 5 b
3 d 4 b
4 b 7 b
我知道这很容易使用sed
命令来删除带有特定字符串的特定行。但是如果我只想删除那些第二个字段的值为b的行(即第二行和第四行)呢?
我有一个包含矩阵的文件。例如,我有:如何使用Linux命令(sed?)删除文件中的特定行?
1 a 2 b
2 b 5 b
3 d 4 b
4 b 7 b
我知道这很容易使用sed
命令来删除带有特定字符串的特定行。但是如果我只想删除那些第二个字段的值为b的行(即第二行和第四行)呢?
你可以在sed中使用正则表达式。
sed -i 's/^[0-9]\s+b.*//g' xxx_file
或
sed -i '/^[0-9]\s+b.*/d' xxx_file
的“-i”参数将修改该文件的内容直接,只要你想,你可以删除“-i”,并将结果输出到其他文件。
AWK:
cat yourfile.txt | awk '{if($2!="b"){print;}}'
感谢:>看起来不错。 – 2013-04-07 02:13:23
我怀疑'$ 2!=“b”'会打印正确的行; '=='条件打印应该删除的行。另外,您还可以获得[UUOC Award](http://catb.org/jargon/html/U/UUOC.html)。你可以并应该使用'awk'...'yourfile.txt'。 – 2013-04-07 02:21:17
我喜欢那个页面。猫“花费”我的一个过程。我付了多少钱? – sjr 2013-04-07 22:13:44
awk中只是做工精细,只是使用的代码如下:
awk '{if ($2 != "b") print $0;}' file
,如果你想获得更多的使用量约占awk
,只是man
吧!
嗨,谢谢。但是,你能告诉我命令中的哪个字段指定了b应该在第二个字段吗?我没有看到像“2”这样的值...... – 2013-04-07 02:11:50
正则表达式的工作方式是'^'标记行的开始; '[0-9]'查找单个数字; '\ s *'会查找零个或多个空格字符(如果您使用的sed的版本支持它,在Linux上通常是这种情况 - 但要注意非Linux系统),然后是一个'b'(然后''*'与该行上的其他内容相匹配)。第一个命令用“无”替换所有的命令,当第二列有一个“b”时留下空行;第二行删除行(并且在正则表达式的末尾确实不需要'。*')。 _ [...继续...] _ – 2013-04-07 02:17:16
@JonathanLeffler哦。感谢您的澄清。 – 2013-04-07 02:19:18