sed搜索子字符串

时间:2018-04-24 15:28:58

标签: regex sed

我尝试使用' sed'来搜索子字符串。

例如,在'之前提取字符串字符('字符并打印它。

下面的表达式只有在单词和'('字符)之间没有空格时才有效。

$ echo "void fun()" | sed 's/.* \(.*\)(.*/\1/'
fun
$ echo "void fun ()" | sed 's/.* \(.*\)(.*/\1/'

那么,搜索字符串单词的正确表达式是什么,后跟空格|非空格'('字符。

2 个答案:

答案 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仅打印匹配的部分