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

时间:2019-07-16 13:08:31

标签: bash shell

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

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

import sys

def saying():
    sys.path.append('/home/tony')
    print(sys.path)

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

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

我的目标:

import sys

def saying():
    #sys.path.append('/home/tony')
    print(sys.path)

我在这里发现了很多问题,但是似乎没有相关的问题带有缩进。

我认为我的脚本步骤是:

  1. 在哪一行找到'/ home / tony'并将其保存到变量v1
  2. 搜索包含“ / home / tony”的整行,并将其保存到另一个变量v2
  3. 使用sed替换
### Step 1
v1=$(nl qq | grep '/home/tony' | awk '{print $1 " "}')   # GOT "3 "
v1=$((--${v1}))      # GOT "3"

### Step 2 (Still have no idea)
cat user.py | grep '[[:space:]]*/home/tony'  
# GOT "    sys.path.append('/home/tony')"

# But when I save it to variable
v2=$(cat user.py | grep '[[:space:]]*/home/tony')
echo ${v2}
# "sys.path.append('/home/tony')"   <---- Whitespace disappeared

### Step 3 (Still have no idea because I was blocked by Step 2)

请帮助我,否则,如果您有任何其他想法将很好。

2 个答案:

答案 0 :(得分:4)

  

我必须在一天内多次进行git pull,然后再注释该行   包括/ homt / tony,然后运行我的项目。

我不明白。

无论如何,您只需使用sed即可:

sed -i "s,sys.path.append('/home/tony'),#sys.path.append('/home/tony')," user.py

MacOS(您需要在-i选项之后添加''):

sed -i '' "s,sys.path.append('/home/tony'),#sys.path.append('/home/tony')," user.py

如果该行可能不是sys.path.append('/home/tony')之外的其他字符(问题不清楚):

sed -i -E 's,(.*/home/tony.*),#\1,' user.py

如果您需要将#放在缩进之后:

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 -i inplace '/home\/tony/{$0="#"$0}1' user.py

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

编辑:

找到了它,但我很乐意看到一个更好的东西:

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

答案 1 :(得分:2)

只有一个sys.path.append吗?

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

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