使用sed / awk匹配n个空格后的单词

时间:2012-10-13 18:59:21

标签: regex sed awk

如果我有一个这样的字符串:

  

word_1测试

有没有办法可以使用sed / awk来获取第二个或第三个单词?

4 个答案:

答案 0 :(得分:2)

如果您想要每行的第三个单词,请使用cut -f 3 file_name。如果你只想在第一个单词与特定字符串awk '/^word_1/ { print $3; }' file_name或类似字符串匹配时想要第三个单词(因为我使用了awk已经有一段时间了,所以我必须在使用之前查找语法)。

答案 1 :(得分:2)

如果您只想要每行的第二个或第三个单词,我只需使用awk,如下所示:

awk '{ print $2 }' file.txt

表示第二个单词,或者$3代替$2代表第三个单词等。

@ paul-tomblin对cut的建议也很好,不过我认为如果事情很简单,可以用awk,我会用它而不是花时间和脑细胞计算我需要使用一些其他随机Posix命令的神秘选项。也就是说,我认为值得集中精力学习更通用的工具(例如awk)。

答案 2 :(得分:1)

您可以使用for循环使用awk在n个空格后打印单词。如果您在bash变量中保存了空格数,则可以执行以下操作:

spaces=0
awk -v n=$spaces '{ for (i=n+1; i<=NF; i++) printf (i!=NF) ? $i" " : $i"\n" }' file.txt

结果:

word_1 something test

spaces=1
awk -v n=$spaces '{ for (i=n+1; i<=NF; i++) printf (i!=NF) ? $i" " : $i"\n" }' file.txt

结果:

something test

spaces=2
awk -v n=$spaces '{ for (i=n+1; i<=NF; i++) printf (i!=NF) ? $i" " : $i"\n" }' file.txt

结果:

test

答案 3 :(得分:0)

这可能适合你(GNU sed):

echo {a..z} | sed -r 's/(\s*(\S*)){10}.*/\2/'
j

{10}可以是任何数字,例如{2}会返回b

对于高编号的单词awk效率更高。