我尝试使用' sed'来搜索子字符串。
例如,在'之前提取字符串字符('字符并打印它。
下面的表达式只有在单词和'('字符)之间没有空格时才有效。
$ echo "void fun()" | sed 's/.* \(.*\)(.*/\1/'
fun
$ echo "void fun ()" | sed 's/.* \(.*\)(.*/\1/'
那么,搜索字符串单词的正确表达式是什么,后跟空格|非空格'('字符。
答案 0 :(得分:1)
*
贪婪,会尽可能地匹配。所以我建议避免.*
,而是使用不必要的东西。 [^ ]*
仅匹配非空格字符
$ echo "void fun()" | sed 's/^[^ ]* \([^ ]*\) *(.*/\1/'
fun
$ echo "void fun ()" | sed 's/^[^ ]* \([^ ]*\) *(.*/\1/'
fun
IMO,使用awk
$ echo "void fun()" | awk -F'[ (]' '{print $2}'
fun
$ echo "void fun ()" | awk -F'[ (]' '{print $2}'
fun
-F'[ (]'
使用空格或(
作为字段分隔符print $2
打印第二个字段答案 1 :(得分:1)
Sed用于编辑,grep用于搜索。
$ echo $'void fun()\nvoid fun ()' | grep -o '\S\S*\s*()'
fun()
fun ()
\S
表示非空白*
表示重复0次或更多次\s
表示空白-o
仅打印匹配的部分