有条件地删除第一个单词

时间:2016-05-14 04:23:26

标签: unix sed

如果文件中的每一行包含多个单词,如何删除第一个单词?

文件:

test test2
test3
test4 test5 test6
test7

结果:

test2
test3
test5 test6 
test7

另外,我怎样才能保存上面文件中的最后一个单词,即

RESULT2:

test2
test3
test6
test7 

2 个答案:

答案 0 :(得分:1)

要删除每行的第一个单词,

cut -d' ' -f2- fileName

要获取每一行的最后一个单词并将其保存在新文件中,

awk '{print $NF}' fileName > newFileName

答案 1 :(得分:1)

一个sed解决方案:如果该行包含空格,我们知道有几个单词,所以我们删除所有内容,包括第一个空格。

$ sed '/ /s/[^ ]* //' infile
test2
test3
test5 test6
test7

相反,我们再次检查一个空格;如果有的话,我们删除所有内容,包括最后一个空格(.*是贪婪的)。

$ sed '/ /s/.* //' infile
test2
test3
test6
test7

如果单词没有用空格分隔,但是例如标签,我们可以用[[:blank:]]替换上面空格的所有实例:

sed '/[[:blank:]]/s/[^[:blank:]]*[[:blank:]]//' infile

等等。

检查空格/空白并非绝对必要:如果没有,则替换不会执行任何操作,所以

sed 's/[^ ]* //' infile

sed 's/.* //' infile

也会有效,但在我看来,检查空白会更清楚地表达意图。