从问题中,使用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 \2");\n\1\nprintf("locked \2");/g'
测试
$ echo "mutex_lock(rdlock);" | sed 's/\(.*(\(.*\));\)/printf ("locking \2");\n\1\nprintf("locking \2");/g'
printf ("locked rdlock");
mutex_lock(rdlock);
printf("locking rdlock");
和
$ echo "mutex_lock(&in->bq[CPORT].lock);" | sed 's/\(.*(\(.*\));\)/printf ("locking \2");\n\1\nprintf ("locking \2");/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 \2");\n\1\nprintf ("locking \2");/g'
测试
echo "mutex_lock(&in->bq[CPORT].lock);" | sed 's/\(mutex_lock(\(.*\));\)/printf ("locking \2");\n\1\nprintf ("locking \2");/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 \2);\n\1\nprintf ("locking \2");/g'
[^)]
negatec字符类。会匹配任何其他东西)
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句