如何在比赛后打印所有内容?

时间:2019-06-11 21:10:22

标签: bash shell

我需要在火柴后面打印所有内容。在这种情况下,它是“”。

尝试使用awksedgrep。每次它只打印比赛前的所有内容。

Comments (){
        line=$1
        comment=$(echo $line | sed -n 's/ //p')
        echo $comment
}

Comment="$(Comments $line)"

输入类似于:

name.surname@email.com;KF-2514 WE NEED TO TALK A LOT

输出应为:

WE NEED TO TALK A LOT

感谢您的帮助。

4 个答案:

答案 0 :(得分:1)

例如,您可以使用参数扩展。

echo ${line#* }

从字符串的开头删除第一个空格。

答案 1 :(得分:0)

将grep与PCRE一起使用:

echo "$line"| grep -oP '\s\K.*'
WE NEED TO TALK A LOT

使用awk

echo "$line" |awk '{$1=""}1'
 WE NEED TO TALK A LOT

使用sed

echo "$line" |sed -r 's/^[^ ]+//g'
 WE NEED TO TALK A LOT

或者,sed不带有-r标志:

echo "$line" |sed  's/^[^ ]\+//g'
 WE NEED TO TALK A LOT

您可能想像这样运行您的函数:

comments(){
    input="$1"
    echo "$input"|grep -oP '\s\K.*'

    }

    #pass the input line here
    comments "name.surname@email.com;KF-2514 WE NEED TO TALK A LOT"

答案 2 :(得分:0)

麻烦可能出在空间上,代码line=$1会将$line设置为“ name.surname@email.com; KF-2514” 。因此sed将看不到任何空间,因此不会打印任何东西。

尝试将$1更改为$@,丢失不需要的变量,然后再稍微更改sed代码:

Comments (){  echo "$@" | sed -n 's/^[^ ]* //p') ; }

Comments 'name.surname@email.com;KF-2514 WE NEED TO TALK A LOT' 

输出:

WE NEED TO TALK A LOT

要在名为 foo 的文件上使用上述功能,请尝试:

while read x; do Comments "$x" ; done < foo

但是,如果输入文件,则不使用任何包装函数就使用sed可能会更简单:

sed -n 's/^[^ ]* //p' foo

答案 3 :(得分:0)

致电时

Comment="$(Comments $line)"

行等于

name.surname@email.com;KF-2514 WE NEED TO TALK A LOT

函数内部的$1设置为name.surname@email.com;KF-2514,这就是您要处理的内容。调用该函数的正确方法是

Comment=$(Comments "$line")

此外,应用注释中概述的建议之一,以正确提取要查找的行的一部分,例如,遵循 jenesaisquoi 描述的建议。