【问题标题】:Print word after string在字符串后打印单词
【发布时间】:2019-06-28 06:20:11
【问题描述】:

如何在 centrain 字符串后打印单词?

我有一个文件

Hello word.

我想得到一个输出:

#word

类似

awk '{ print '#' }'

谢谢

【问题讨论】:

    标签: awk


    【解决方案1】:

    你可以使用

    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}'
    

    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
    

    查看online demo

    这里,for(i=1;i&lt;=NF;i++) 枚举了所有字段,如果该字段等于 54517334,则打印下一个以 # 开头的字段。

    【讨论】:

    • 谢谢您,是否有可能找到字符串“hello”的解决方案。我只举了一个例子,我需要的文件有更多的字符串。它不是带有列的文件。
    • @Elisabeth 你能解释一下吗?
    • 例如,我在一列中:类似:'/stackoverflow.com/questions/54517334/print-word-after-string' 我想写#print-word-after- string ,所以我想写,我想在 '54517334/' 之后打印一个字符串
    • @Elisabeth 如果您想使用/,请使用awk -F'[/.]' '{for(i=1;i&lt;=NF;i++){if($i=="54517334"){print "#"$(i+1)}}}' file
    • @Elisabeth -F 是告诉awk 使用自定义字段分隔符的选项。 [./] 是一个正则表达式,一个括号表达式,它匹配括号表达式中指定的任何一个字符,./。您使用$i 引用字段($1 是第一个,$0 是整行)。
    【解决方案2】:

    编辑: 如果您想搜索字符串并在其旁边打印字符串,请尝试以下操作。我在这里寻找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
    

    【讨论】:

    • @Elisabeth,您能否尝试我的 EDIT 解决方案,如果这对您有帮助,请告诉我?
    • 谢谢你以及如何解决文件'Hello/word'的问题?是/有问题吗?
    • @Elisabeth,是的,然后在awk 之后设置-F'[/ ]',那么它应该可以正常工作。让我知道情况如何?
    猜你喜欢
    • 1970-01-01
    • 2015-04-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多