选择括号 () 之间的文本并对其进行操作
selecting the text between brackets () and manipulating it
从问题中,Print text between delimiters using sed
我能够得到括号之间的文本。但是当我想修改时,我发现困难。有人可以帮帮我吗?
简单案例:
输入:
mutex_lock(rdlock);
输出:
在这里,我想在 () 前后打印名称文本,如下所示。
printf("locking rdlock");mutex_lock(rdlock);printf("locked rdlock");
复杂情况:
输入:
mutex_lock(&in->bq[CPORT].lock);
输出:
printf("locking &in->bq[CPORT].lock");mutex_lock(&in->bq[CPORT].lock);printf("locked &in->bq[CPORT].lock");
在此先致谢。
类似
sed 's/\(.*(\(.*\));\)/printf ("locking ");\n\nprintf("locked ");/g'
测试
$ echo "mutex_lock(rdlock);" | sed 's/\(.*(\(.*\));\)/printf ("locking ");\n\nprintf("locking ");/g'
printf ("locked rdlock");
mutex_lock(rdlock);
printf("locking rdlock");
和
$ echo "mutex_lock(&in->bq[CPORT].lock);" | sed 's/\(.*(\(.*\));\)/printf ("locking ");\n\nprintf ("locking ");/g'
printf ("locking &in->bq[CPORT].lock");
mutex_lock(&in->bq[CPORT].lock);
printf ("locking &in->bq[CPORT].lock");
编辑
确切地说
sed 's/\(mutex_lock(\(.*\));\)/printf ("locking ");\n\nprintf ("locking ");/g'
测试
echo "mutex_lock(&in->bq[CPORT].lock);" | sed 's/\(mutex_lock(\(.*\));\)/printf ("locking ");\n\nprintf ("locking ");/g'
printf ("locking &in->bq[CPORT].lock");
mutex_lock(&in->bq[CPORT].lock);
printf ("locking &in->bq[CPORT].lock");
为了安全起见,可以写成
sed -r 's/(mutex_lock\(([^)]*)\);)/printf ("locking );\n\nprintf ("locking ");/g'
[^)]
否定字符 class。将匹配 )
以外的任何内容
从问题中,Print text between delimiters using sed 我能够得到括号之间的文本。但是当我想修改时,我发现困难。有人可以帮帮我吗?
简单案例:
输入:
mutex_lock(rdlock);
输出: 在这里,我想在 () 前后打印名称文本,如下所示。
printf("locking rdlock");mutex_lock(rdlock);printf("locked rdlock");
复杂情况:
输入:
mutex_lock(&in->bq[CPORT].lock);
输出:
printf("locking &in->bq[CPORT].lock");mutex_lock(&in->bq[CPORT].lock);printf("locked &in->bq[CPORT].lock");
在此先致谢。
类似
sed 's/\(.*(\(.*\));\)/printf ("locking ");\n\nprintf("locked ");/g'
测试
$ echo "mutex_lock(rdlock);" | sed 's/\(.*(\(.*\));\)/printf ("locking ");\n\nprintf("locking ");/g'
printf ("locked rdlock");
mutex_lock(rdlock);
printf("locking rdlock");
和
$ echo "mutex_lock(&in->bq[CPORT].lock);" | sed 's/\(.*(\(.*\));\)/printf ("locking ");\n\nprintf ("locking ");/g'
printf ("locking &in->bq[CPORT].lock");
mutex_lock(&in->bq[CPORT].lock);
printf ("locking &in->bq[CPORT].lock");
编辑
确切地说
sed 's/\(mutex_lock(\(.*\));\)/printf ("locking ");\n\nprintf ("locking ");/g'
测试
echo "mutex_lock(&in->bq[CPORT].lock);" | sed 's/\(mutex_lock(\(.*\));\)/printf ("locking ");\n\nprintf ("locking ");/g'
printf ("locking &in->bq[CPORT].lock");
mutex_lock(&in->bq[CPORT].lock);
printf ("locking &in->bq[CPORT].lock");
为了安全起见,可以写成
sed -r 's/(mutex_lock\(([^)]*)\);)/printf ("locking );\n\nprintf ("locking ");/g'
[^)]
否定字符 class。将匹配)
以外的任何内容