删除python多行注释,不删除字符串
问题:我想使用shell脚本删除:删除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 """ 请帮忙 像这样的测试
"""
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命令行模式,用三个引号替换所有键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命令行模式,用三个引号替换所有键如果您担心钥匙
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'