我需要在火柴后面打印所有内容。在这种情况下,它是“”。
尝试使用awk
,sed
和grep
。每次它只打印比赛前的所有内容。
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
感谢您的帮助。
答案 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 描述的建议。