我想知道是否有办法从文本文件中删除某些关键字,比如说我有一个带有行的大文件
My name is John
My name is Peter
My name is Joe
是否有办法删除" 我的名字是"没有删除整行?这可以用grep
以某种方式完成吗?我试图找到一个解决方案,但几乎所有我遇到的只是专注于删除整行。即使我可以删除文本直到某一列,这将解决我的问题。
答案 0 :(得分:2)
您需要sed
或awk
等文字处理工具来执行此操作,而不是grep
。
试试这个:
sed 's/My name is//g' file
修改的
grep
的目的:
$ man grep | grep -A2 DESCRIPTION
DESCRIPTION
grep searches the named input FILEs (or standard input if no files are named, or if a single hyphen-minus (-) is given as file name) for lines containing a
match to the given PATTERN. By default, grep prints the matching lines.
答案 1 :(得分:2)
使用GNU grep:
grep -Po "My name is\K.*" file
带有前导空格的输出:
John Peter Joe
-P
:将PATTERN解释为Perl正则表达式
-o
:仅打印匹配行的匹配(非空)部分,每个此类部分位于单独的输出行上。
\K
:在\K
之前删除匹配的部分。
答案 2 :(得分:1)
再尝试一个简单的grep。
grep -o '[^ ]*$' Input_file
-o将仅打印匹配的行部分,现在在正则表达式中,它将查找从最后一个空格到最后一行的文本。
答案 3 :(得分:0)
首先删除空的awk解决方案 行,然后打印最后一个字段。
awk '!/^$/{print $NF}' file
John
Peter
Joe
答案 4 :(得分:0)
使用cut
:
cut -d' ' -f4 input_file
GNU cut
具有补充选项,用于删除 -f
指定的区域。如果 input_file 具有诸如“我的名字是John Doe ”之类的姓氏,则前面的代码将打印“ John ”,这将打印“ John Doe “:
cut --complement -d' ' -f1-3 input_file
与其他工具相比, cut
需要更少的内存:
# these numbers will vary by *nix version and disto...
wc -c `which cut sed awk grep` | head -n -1 | sort -n
43224 /usr/bin/cut
109000 /bin/sed
215360 /bin/grep
662240 /usr/bin/awk