【发布时间】:2019-06-28 06:20:11
【问题描述】:
如何在 centrain 字符串后打印单词?
我有一个文件
Hello word.
我想得到一个输出:
#word
类似
awk '{ print '#' }'
谢谢
【问题讨论】:
标签: awk
如何在 centrain 字符串后打印单词?
我有一个文件
Hello word.
我想得到一个输出:
#word
类似
awk '{ print '#' }'
谢谢
【问题讨论】:
标签: awk
你可以使用
awk '{sub(/[[:punct:]]+$/, "", $2);print "#"$2}' file > newfile
请参阅online demo。
sub(/[[:punct:]]+$/, "", $2) 操作从字段 2 的末尾 ($) 中删除 1 个或多个标点字符 ([[:punct:]]+),print "#"$2 在其前面加上 # 并打印出来。
为了确保在Hello 之后得到单词,您可以使用
cat file | grep -Po 'Hello\s+\K\w+' | awk '{print "#"$0}'
或者,在sed的帮助下:
sed 's/.*Hello \([[:alnum:]]*\).*/#\1/' file > newfile
在这里,.*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,则打印下一个以 # 开头的字段。
【讨论】:
/,请使用awk -F'[/.]' '{for(i=1;i<=NF;i++){if($i=="54517334"){print "#"$(i+1)}}}' file
-F 是告诉awk 使用自定义字段分隔符的选项。 [./] 是一个正则表达式,一个括号表达式,它匹配括号表达式中指定的任何一个字符,. 或 /。您使用$i 引用字段($1 是第一个,$0 是整行)。
编辑: 如果您想搜索字符串并在其旁边打印字符串,请尝试以下操作。我在这里寻找hello 字符串,您可以根据需要更改它。
awk '{for(i=1;i<=NF;i++){if(tolower($i)=="hello"){print "#"$(i+1)}}}' Input_file
或(创建一个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
或
awk -F'[ .]' '{print $(NF-1)}' Input_file
【讨论】:
awk 之后设置-F'[/ ]',那么它应该可以正常工作。让我知道情况如何?