我想使用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)
我在这里发现了很多问题,但是似乎没有相关的问题带有缩进。
我认为我的脚本步骤是:
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)
请帮助我,否则,如果您有任何其他想法将很好。
答案 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