Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/327.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.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
删除python多行注释,不删除字符串_Python_Shell_Sed_Comments - Fatal编程技术网

删除python多行注释,不删除字符串

删除python多行注释,不删除字符串,python,shell,sed,comments,Python,Shell,Sed,Comments,问题:我想使用shell脚本删除: """ 111 222 """ or ''' 111 222 ''' 但不要移除 s = """ 111 222 """ 我通过以下方式进行测试: find -name *.py | xargs -i sed -i "/^\s*\"\"\".*\"\"\"$/d" {} find -name *.py | xargs -i sed -i '/"""/,/"""/d' {} 但是我不知道 s = """ 111 222 """ 请帮忙 像这样的测试

问题:我想使用shell脚本删除:

"""
111
222
"""
or 
'''
111
222
'''
但不要移除

s = """
111
222
"""
我通过以下方式进行测试:

find -name *.py | xargs -i  sed -i "/^\s*\"\"\".*\"\"\"$/d" {}

find -name *.py | xargs -i sed -i '/"""/,/"""/d' {}
但是我不知道

s = """
111
222
"""
请帮忙

像这样的测试代码,谢谢 > """ 模板 福班{ 公众: 虚拟int-Bar(); }; “”“

不是sed,但是你可以试试

对于您的问题,这是一种快速解决方法(它用一个键交换“”:eh3UgT):

cat myfile.py |\
vims-e'=\s*“”“'f\'xxxaeh3UgT\/\”\“\”\xxxaeh3UgT'\
““””V/\“\d'-t“%s/eh3UgT/“”“/g”
你的测试文件对我有用

说明:

  • '=s\*“”“
    -将所有行与
    =
    匹配,然后在后面的某个地方匹配

  • 'f\'xxxaeh3UgT\/\“\”\xxxaeh3UgT'
    -在该匹配上,使用
    f\“
    (一个vim命令)移动到第一个
    ,然后删除引号
    xxx
    ,然后进入插入模式
    a
    ,然后键入
    eh3UgT
    ,然后移动到下一个三引号
    \/code>,
    xxx
    ,然后再次键入钥匙
    a
    然后
    eh3UgT

  • “”“”
    -匹配所有剩余的三重引号

  • 'V/\“\”\d'
    -开始突出显示
    V
    ,移动到下一个三引号
    /\“\”\
    ,然后删除
    d

  • -t'%s/eh3UgT/“”“/g'
    -打开正常vim命令行模式,用三个引号替换所有键

  • 这里,1。二,。通过用键替换字符串变量的引号来“保存”字符串变量,然后是3。四,。删除包含在三个引号内的所有内容,然后删除5。将键替换为三重引号

    如果您担心钥匙
    eh3UgT
    在其他地方被意外匹配,只需将其加长即可。如果您担心这是不安全的(假设这是一个循环脚本),那么每次都随机生成密钥。

    不是sed,但您可以尝试

    对于您的问题,这是一种快速解决方法(它用一个键交换“”:eh3UgT):

    cat myfile.py |\
    vims-e'=\s*“”“'f\'xxxaeh3UgT\/\”\“\”\xxxaeh3UgT'\
    ““””V/\“\d'-t“%s/eh3UgT/“”“/g”
    
    你的测试文件对我有用

    说明:

  • '=s\*“”“
    -将所有行与
    =
    匹配,然后在后面的某个地方匹配

  • 'f\'xxxaeh3UgT\/\“\”\xxxaeh3UgT'
    -在该匹配上,使用
    f\“
    (一个vim命令)移动到第一个
    ,然后删除引号
    xxx
    ,然后进入插入模式
    a
    ,然后键入
    eh3UgT
    ,然后移动到下一个三引号
    \/code>,
    xxx
    ,然后再次键入钥匙
    a
    然后
    eh3UgT

  • “”“”
    -匹配所有剩余的三重引号

  • 'V/\“\”\d'
    -开始突出显示
    V
    ,移动到下一个三引号
    /\“\”\
    ,然后删除
    d

  • -t'%s/eh3UgT/“”“/g'
    -打开正常vim命令行模式,用三个引号替换所有键

  • 这里,1。二,。通过用键替换字符串变量的引号来“保存”字符串变量,然后是3。四,。删除包含在三个引号内的所有内容,然后删除5。将键替换为三重引号


    如果您担心钥匙
    eh3UgT
    在其他地方被意外匹配,只需将其加长即可。如果您担心这是不安全的(假设这是一个重复出现的脚本),那么每次都随机生成密钥。

    您最好不要滥用字符串文本作为注释。LFG1000554173:/usr1/r00230944/temp#i#cat gmock_class_test.py”“”模板类Foo{public:virtual int Bar();};”source=“”类Foo{public:virtual int Bar();};“LFG1000554173:/usr1/r00230944/temp_i#sed-e'/[^=]\s*”/,/“/d'gmock_class_test.py”“模板类Foo{public:virtual int Bar();”;“我已经和我的同事讨论过:”“总是带一对,然后我们可以从grep测试1,3,5,7…””result和grep=used-v,然后发布包含各种条目的示例输入内容“,”模板类Foo{public:virtual int Bar();};“'source=”“”类Foo{public:virtual int Bar();};“”“,”模板类Foo{public:virtual int Bar();};“'source=”“”类Foo{public:virtual void Bar();;};“,”(bool flag)const;;“source=”“”类Foo{public:virtual int Bar(void);};“最好不要滥用字符串文字作为注释。LFG1000554173:/usr1/r00230944/temp#i#cat gmock#u class#test.py”“”模板类Foo{public:virtual int Bar();};“source=”“”类Foo{public:virtual int Bar();”;“LFG1000554173:/usr1/r00230944/temp_i#sed-e'/[^=]\s*“/,/”/d'gmock_class_test.py”““template class Foo{public:virtual int Bar();”;“我和我的同事讨论过:”“总是带一对,然后我们可以从grep测试1,3,5,7…””result和grep=used-v,然后发布包含各种条目的示例输入内容“,”模板类Foo{public:virtual int Bar();};“'source=”“”类Foo{public:virtual int Bar();};“”“,”模板类Foo{public:virtual int Bar();};“'source=”“”类Foo{public:virtual void Bar();;};“,”(bool标志)const;};“”“source=”“”类Foo{public:virtual int Bar(void);};”“”谢谢,当我在本地执行vims命令时,我的本地bin dir没有vims,我用谷歌搜索,我无法得到答案….,你能用shell重写这个方法吗?我的操作系统是SUSE12.2你可以运行:
    wget-qhttps://raw.githubusercontent.com/MilesCranmer/vim-stream/master/vims &&chmod+xvims
    。然后,用
    /vims
    i
    source = """
    class Foo {
    public:
    virtual int Bar();
    };
    """
    
    """
    template<class T>
    class Foo {
    public:
    virtual int Bar();
    };
    """
    
    source = """
    class Foo {
    public:
    virtual void Bar(bool flag) const;
    };
    """
    
    source = """
    class Foo {
    public:
    virtual int Bar(void);
    };
    """
    
    function delete_multiline_comments
            grep -n '\"\"\"' gmock_class_test.py | sed  '/=/,+1d' >a.txt
    
            line=$(wc -l a.txt| awk '{print $1}')
    
            for (( i=0;i<$line/2;i++ ))
            do
                    second=`tail -1 a.txt | tr -cd "[0-9]"`
                    sed -i '$d' a.txt
    
                    first=`tail -1 a.txt | tr -cd "[0-9]"`
                    sed -i '$d' a.txt
    
                    sed -i "${first},${second}d" gmock_class_test.py
            done
    end
    
    sed -ie "/'''.*'''/d" 
    sed -i  "/^\s*\"\"\".*\"\"\"$/d" 
    
    cat myfile.py | \
        vims -e '=\s*"""' 'f\"xxxaeh3UgT\<esc>/\"\"\"\<enter>xxxaeh3UgT' \
                '"""' 'V/\"\"\"\<enter>d' -t '%s/eh3UgT/"""/g'