Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Regex 经济及社会发展局局长;protobuf:需要删除点吗_Regex_Bash_Sed_Proto - Fatal编程技术网

Regex 经济及社会发展局局长;protobuf:需要删除点吗

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

我需要使用sed删除点,但不是所有点

- 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)
在这里删除

它应该适用于具有不同内容的多个文件



可以找到完整的代码

假设只需要删除前面的
代码,下面是一些GNU
sed
代码:

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/^/
    删除虚拟空间。

    假设只有前面的
    需要删除,下面是一些GNU
    sed
    代码:

    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/^/
    删除虚拟空间。

    一个可能更简单的解决方案(同时适用于GNU
    sed
    和BSD/macOS
    sed
    ):

    如果
    也可以作为行中的第一个字符出现,请使用以下变量:
    sed-E的/(^ |[:space:][:punt:][])\./\1/g'文件

    假设任何
    前面都有:

    • 空白字符(字符类
      [:space:
      • 如:
    • 或标点字符(字符类
      [:punct://code>)
      
      • 如:
        (.
    应通过将匹配序列仅替换为
    前面的字符,通过正则表达式中的子表达式
    (…)
    捕获,并在替换字符串中引用
    \1
    (第一个捕获组)来删除


    如果颠倒逻辑,可以尝试更简单的方法:

    sed -E 's/([^[:alnum:]])\./\1/g' file
    
    如果
    也可以作为行中的第一个字符出现:
    sed-E的/(^ |[^[:alnum:]])\./\1/g'文件


    这将替换所有不以字母数字字符(字母或数字)开头的句点(
    ^
    )。

    一个可能更简单的解决方案(适用于GNU
    sed
    和BSD/macOS
    sed
    ):

    如果
    也可以作为行中的第一个字符出现,请使用以下变量:
    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:谢谢;考虑到示例输入,我认为没有必要处理行首字母
    ,但我已更新了答案,以显示如何处理该情况(如果需要)。其他