Unix 有条件地删除第一个单词

Unix 有条件地删除第一个单词,unix,sed,Unix,Sed,如果文件中的每一行都包含多个单词,如何从中删除第一个单词 文件: 结果: test2 test3 test5 test6 test7 另外,如何仅保存上述文件中的最后一个单词,即 结果2: test2 test3 test6 test7 要删除每行的第一个字 cut -d' ' -f2- fileName 要获取每行的最后一个字并将其保存在新文件中 awk '{print $NF}' fileName > newFileName 要删除每行的第一个字 cut -d' ' -f2

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

文件:

结果:

test2
test3
test5 test6 
test7
另外,如何仅保存上述文件中的最后一个单词,即

结果2:

test2
test3
test6
test7 

要删除每行的第一个字

cut -d' ' -f2- fileName
要获取每行的最后一个字并将其保存在新文件中

awk '{print $NF}' fileName > newFileName

要删除每行的第一个字

cut -d' ' -f2- fileName
要获取每行的最后一个字并将其保存在新文件中

awk '{print $NF}' fileName > newFileName

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

$ sed '/ /s/[^ ]* //' infile
test2
test3
test5 test6
test7
相反,我们再次检查空间;如果有,我们将删除最后一个空格之前的所有内容(
*
是贪婪的)

如果单词不是用空格分隔的,例如制表符,我们可以用
[:blank:][]
替换上面空格的所有实例:

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

严格来说,检查空格/空白并不是必需的:如果没有空格,则替换不会起任何作用,因此

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


也可以,但检查空白的意思更清楚,在我看来。

< P>一个SED解决方案:如果该行包含一个空格,我们知道有几个单词,所以我们删除所有到并包括第一个空间。

$ sed '/ /s/[^ ]* //' infile
test2
test3
test5 test6
test7
相反,我们再次检查空间;如果有,我们将删除最后一个空格之前的所有内容(
*
是贪婪的)

如果单词不是用空格分隔的,例如制表符,我们可以用
[:blank:][]
替换上面空格的所有实例:

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

严格来说,检查空格/空白并不是必需的:如果没有空格,则替换不会起任何作用,因此

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

也适用,但在我看来,对空白的检查更清楚地表达了意图。