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
Bash 使用sed到python文件注释特定行_Bash_Shell - Fatal编程技术网

Bash 使用sed到python文件注释特定行

Bash 使用sed到python文件注释特定行,bash,shell,Bash,Shell,我想用shell脚本注释特定的行 我的原始python文件(user.py) 注意:我不能确定只有4个空格。项目更新后可能会有8个空格 我必须在一天内做很多次git pull,然后对包含/homt/tony的行进行注释,然后运行我的项目 我的目标是: import sys def saying(): #sys.path.append('/home/tony') print(sys.path) 我在这里发现了很多问题,但似乎没有相关的问题有缩进 我认为我的脚本步骤是: 在哪一行

我想用shell脚本注释特定的行

我的原始python文件(user.py)

注意:我不能确定只有4个空格。项目更新后可能会有8个空格

我必须在一天内做很多次git pull,然后对包含/homt/tony的行进行注释,然后运行我的项目

我的目标是:

import sys

def saying():
    #sys.path.append('/home/tony')
    print(sys.path)
我在这里发现了很多问题,但似乎没有相关的问题有缩进

我认为我的脚本步骤是:

  • 在哪一行中找到“/home/tony”,并将其保存到变量v1
  • 搜索包含“/home/tony”的整行,并将其保存到另一个变量v2
  • 使用
    sed
    替换
  • ###步骤1
    v1=$(nl qq | grep'/home/tony'| awk'{print$1'}')#得到“3”
    v1=$((-${v1}))#得到“3”
    ###步骤2(仍然不知道)
    cat user.py | grep'[:space:][]*/home/tony'
    #得到“sys.path.append('/home/tony')”
    #但当我把它保存到变量
    v2=$(cat user.py | grep'[:space:][]*/home/tony')
    echo${v2}
    #“sys.path.append('/home/tony')”
    我必须在一天内做很多次git pull,然后评论这行
    包括/homt/tony,然后运行我的项目

    我不明白

    无论如何,您可以简单地使用
    sed

    sed -i "s,sys.path.append('/home/tony'),#sys.path.append('/home/tony')," user.py
    
    MacOS(您需要在-i选项之后添加
    '
    ):

    如果行可能不是
    sys.path.append('/home/tony')
    (问题不清楚):

    如果需要在缩进后放置
    #

    sed -i -E 's,([[:space:]]*)(.*/home/tony.*),\1#\2,' user.py
    

    由于您使用了
    awk
    ,因此基于awk的解决方案:

    awk '/home\/tony/{$0="#"$0}1' user.py > temp && mv temps user.py
    
    GNU awk>4.1.0(直接替换文件):

    好奇是否有人找到了一个解决方案,将
    #
    放在带有awk的缩进之后(不使用regexp)

    编辑:

    找到了,但我想看看更好的:

    awk -F'[[:space:]]' '/home\/tony/{for(i=1; i<=NF; i++){if($i){$i="#"$i; break}}}1' user.py
    

    awk-F'[:space:][]'/home\/tony/{for(i=1;i是否只有一个sys.path.append

    如果是这样,您可以尝试:

    sed -i 's/sys.path.append/#sys.path.append/' user.py
    

    谢谢。但是我有很多代码需要通过这个脚本进行注释。很抱歉,我没有清楚地描述我的问题。嗨,谢谢你的回答。我的意思是,我们的项目中有用户验证代码。我想对验证部分进行注释。因此,我必须执行
    git reset HEAD^--hard
    ,然后
    git pull
    。然后,开始为了便于调试,我没有验证部分。而且…在阅读了你的答案后,我有一个好主意来解决我的问题。
    sed -i -E 's,([[:space:]]*)(.*/home/tony.*),\1#\2,' user.py
    
    awk '/home\/tony/{$0="#"$0}1' user.py > temp && mv temps user.py
    
    awk -i inplace '/home\/tony/{$0="#"$0}1' user.py
    
    awk -F'[[:space:]]' '/home\/tony/{for(i=1; i<=NF; i++){if($i){$i="#"$i; break}}}1' user.py
    
    sed -i 's/sys.path.append/#sys.path.append/' user.py