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

时间:2017-06-30 02:00:14

标签: 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
"""

请帮助

这样的测试代码,谢谢 >     “””     模板     class Foo {     上市:     virtual int Bar();     };     “”“

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);
};
"""

uptonow: 该 “”” AAA “”” 和 = “”” BBB “”” 已经测试好了 函数delete_multiline_comments

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

以下行用于删除“”“XXXX”“”和“''XXX'''行

sed -ie "/'''.*'''/d" 
sed -i  "/^\s*\"\"\".*\"\"\"$/d" 

1 个答案:

答案 0 :(得分:0)

没有sed,但您可以尝试vims

对于你的问题,这是一个快速的方法(它交换&#34;&#34;&#34;用一个键:eh3UgT):

cat myfile.py | \
    vims -e '=\s*"""' 'f\"xxxaeh3UgT\<esc>/\"\"\"\<enter>xxxaeh3UgT' \
            '"""' 'V/\"\"\"\<enter>d' -t '%s/eh3UgT/"""/g'

它适用于我的测试文件!

说明:

  1. '=s\*"""' - 在{/ p>

  2. 之后的某个地方匹配所有行=然后"""
  3. 'f\"xxxaeh3UgT\<esc>/\"\"\"\<enter>xxxaeh3UgT' - 在该匹配项上,使用"(vim命令)移至第一个f\",然后删除引号xxx,然后输入insert模式a,然后键入eh3UgT,然后移至下一个三重引号\<esc>/\"\"\"\<enter>,然后将其删除xxx,然后再次键入密钥a然后{{ 1}}。

  4. eh3UgT - 匹配所有剩余的三重引号

  5. '"""' - 开始突出显示'V/\"\"\"\<enter>d',转到下一个三重引号V,然后删除/\"\"\"\<enter>

  6. d - 打开普通的vim命令行模式,用三引号替换所有键

  7. 在这里,1。和2.行动起来&#34;保存&#34;字符串变量通过用键替换它们的引号,然后3.和4.删除三引号中包含的所有内容,然后5.用三引号替换键。

    如果您担心偶然在其他地方匹配的密钥-t '%s/eh3UgT/"""/g',请将其缩短。如果您担心这是不安全的(比如这是一个重复的脚本),那么每次都会随机生成密钥。