如何在中心线后打印单词?
我有一个文件
Hello word.
我想得到一个输出:
#word
类似
awk '{ print '#' }'
谢谢
答案 0 :(得分:1)
您可以使用
awk '{sub(/[[:punct:]]+$/, "", $2);print "#"$2}' file > newfile
请参见online demo。
sub(/[[:punct:]]+$/, "", $2)
操作从字段2的末尾([[:punct:]]+
)删除1个或多个标点符号($
),并且print "#"$2
用#
开头并打印出来。
要确保在Hello
之后得到单词,您可以使用
cat file | grep -Po 'Hello\s+\K\w+' | awk '{print "#"$0}'
请参见online demo
或者,在sed
的帮助下:
sed 's/.*Hello \([[:alnum:]]*\).*/#\1/' file > newfile
请参见another demo。
在这里,.*Hello \([[:alnum:]]*\).*
匹配任何0个以上的字符,然后Hello
,一个空格,然后将0个或多个字母数字字符捕获到组1(\1
)中,然后匹配其余的线。 RHS中的#\1
模式保留了前面#
捕获的内容。
使用awk
和.
作为/
字段分隔符的-F'[/.]'
的另一种解决方案:
awk -F'[/.]' '{for(i=1;i<=NF;i++){if($i=="54517334"){print "#"$(i+1)}}}' file
在这里,for(i=1;i<=NF;i++)
枚举了所有字段,如果该字段等于54517334
,则打印下一个开头是#
的下一个字段。
答案 1 :(得分:1)
编辑: :如果您要搜索字符串并在其旁边打印字符串,请尝试执行以下操作。我在这里寻找hello
字符串,您可以根据需要进行更改。
awk '{for(i=1;i<=NF;i++){if(tolower($i)=="hello"){print "#"$(i+1)}}}' Input_file
OR(创建一个awk
变量并执行检查,它将有助于在变量本身中代替字符串hello来更改字符串)
awk -v word_to_search="hello" '{for(i=1;i<=NF;i++){if(tolower($i)==word_to_search){print "#"$(i+1)}}}' Input_file
如果您想通过查找字符串来打印下一个关键字并删除标点符号,然后尝试执行以下操作。
awk -v word_to_search="hello" '{for(i=1;i<=NF;i++){if(tolower($i)==word_to_search){sub(/[[:punct:]]+/,"",$(i+1));print "#"$(i+1)}}}' Input_file
请您尝试以下。
awk -F'[ .]' '{print "#"$2}' Input_file
OR
awk -F'[ .]' '{print $(NF-1)}' Input_file