Regex 经济及社会发展局局长;protobuf:需要删除点吗
我需要使用sed删除点,但不是所有点Regex 经济及社会发展局局长;protobuf:需要删除点吗,regex,bash,sed,proto,Regex,Bash,Sed,Proto,我需要使用sed删除点,但不是所有点 - repeated .CBroadcast_GetBroadcastChatUserNames_Response.PersonaName persona_names = 1 + repeated CBroadcast_GetBroadcastChatUserNames_Response.PersonaName persona_names = 1 此处应删除重复,(重复也可以是可选|必需|扩展)后的点 - rpc NotifyBroadcastViewer
- repeated .CBroadcast_GetBroadcastChatUserNames_Response.PersonaName persona_names = 1
+ repeated CBroadcast_GetBroadcastChatUserNames_Response.PersonaName persona_names = 1
此处应删除重复
,(重复
也可以是可选|必需|扩展
)后的点
- rpc NotifyBroadcastViewerState (.CBroadcast_BroadcastViewerState_Notification) returns (.NoResponse)
+ rpc NotifyBroadcastViewerState (CBroadcast_BroadcastViewerState_Notification) returns (NoResponse)
在这里删除(
它应该适用于具有不同内容的多个文件
可以找到完整的代码假设只需要删除前面的
代码,下面是一些GNUsed
代码:
echo '.a_b.c c.d (.e_f.g) ' |
sed 's/^/& /;s/\([[:space:]{([]\+\)\.\([[:alpha:]][[:alpha:]_.]*\)/\1\2/g;s/^ //'
输出:
a_b.c c.d (e_f.g)
除了
,它还检查两个保持不变的字段:
(
,[
或{
)\uuu
或
不幸的是,虽然
\+
regexp与一个或多个空格等匹配,但如果
位于行的开头,它将失败。(将\*
替换为“*”将匹配开头,但会错误地将c.d
更改为cd
)因此有一个乱码…s/^/&/
在行的开头插入一个虚拟空间,这样\+
就可以按需要工作,然后s/^/
删除虚拟空间。假设只有前面的
需要删除,下面是一些GNUsed
代码:
echo '.a_b.c c.d (.e_f.g) ' |
sed 's/^/& /;s/\([[:space:]{([]\+\)\.\([[:alpha:]][[:alpha:]_.]*\)/\1\2/g;s/^ //'
输出:
a_b.c c.d (e_f.g)
除了
,它还检查两个保持不变的字段:
(
,[
或{
)\uuu
或
不幸的是,虽然
\+
regexp与一个或多个空格等匹配,但如果
位于行的开头,它将失败。(将\*
替换为“*”将匹配开头,但会错误地将c.d
更改为cd
)因此有一个乱码…s/^/&/
在行的开头插入一个虚拟空间,这样\+
就可以按需要工作,然后s/^/
删除虚拟空间。一个可能更简单的解决方案(同时适用于GNUsed
和BSD/macOSsed
):
如果
也可以作为行中的第一个字符出现,请使用以下变量:sed-E的/(^ |[:space:][:punt:][])\./\1/g'文件
假设任何
前面都有:
- 空白字符(字符类
)[:space:
- 如:
- 如:
- 或标点字符(字符类
[:punct://code>)
- 如:
(.
- 如:
前面的字符,通过正则表达式中的子表达式(…)
捕获,并在替换字符串中引用\1
(第一个捕获组)来删除
如果颠倒逻辑,可以尝试更简单的方法:
sed -E 's/([^[:alnum:]])\./\1/g' file
如果,
也可以作为行中的第一个字符出现:sed-E的/(^ |[^[:alnum:]])\./\1/g'文件
这将替换所有不以字母数字字符(字母或数字)开头的句点(
^
)。一个可能更简单的解决方案(适用于GNUsed
和BSD/macOSsed
):
如果
也可以作为行中的第一个字符出现,请使用以下变量:sed-E的/(^ |[:space:][:punt:][])\./\1/g'文件
假设任何
前面都有:
- 空白字符(字符类
)[:space:
- 如:
- 如:
- 或标点字符(字符类
[:punct://code>)
- 如:
(.
- 如:
前面的字符,通过正则表达式中的子表达式(…)
捕获,并在替换字符串中引用\1
(第一个捕获组)来删除
如果颠倒逻辑,可以尝试更简单的方法:
sed -E 's/([^[:alnum:]])\./\1/g' file
如果,
也可以作为行中的第一个字符出现:sed-E的/(^ |[^[:alnum:]])\./\1/g'文件
这将替换所有不以字母数字字符(字母或数字)开头的句点(
^
)。有什么问题吗?您没有解释命令应该做什么的逻辑,例如,它可能只是sed's/\.//g'
。当人们要求您解释时,意味着您的问题不清楚(通常)。请更新您的Q,而不是在评论中回复。您始终可以在评论中添加“请参阅上面修改的Q,谢谢您的帮助”;)。祝您好运。为什么不使用sed-n/(.NoResponse)/(NoResponse)/p'?我更新了问题是什么问题?您没有解释命令应该做什么的任何逻辑,例如,它可以是sed的/\.//g'
。当人们要求您解释时,这意味着您的问题不清楚(通常)。请更新您的问题,而不是在注释中回答。您可以始终包含注释“见上面修改的Q,谢谢你的帮助”;-)。祝你好运。为什么不sed-n的/(.NoResponse)/(NoResponse)/p'?我更新了问题谢谢,我会用这个,解决方案也有效,但这个似乎更有用prettily@morphchallenge:我很高兴听到这个消息;我刚刚添加了一个更简单的解决方案,颠倒了逻辑。在一个元注释中:你还没有足够的声誉,但请记住,一旦你达到15分,你可以-除了接受回答投票之外您还发现有帮助的其他答案(如本例中的agc)。@agc:谢谢;考虑到示例输入,我认为没有必要处理行首字母
,但我已更新了答案,以显示如何处理该情况(如果需要)。其他