Dav*_*ave 0 bash awk grep comments sed
这是一个测试文件
dog
dogcatmoose
case $- in
*i*);;
*) return;;
esac
catmoose
case
esac
dog cat
esac
Run Code Online (Sandbox Code Playgroud)
我需要注释掉以下内容:
dog
dogcatmoose
#case $- in
# *i*);;
# *) return;;
#esac
catmoose
case
esac
dog cat
esac
Run Code Online (Sandbox Code Playgroud)
请注意,仅注释掉了特定行。另请注意,我需要对多个文件执行此操作,并且注释掉的那些行可能位于文件的不同区域。然而,这些线将永远在一起。因此我无法根据行号使用 sed 进行注释。
我如何具体注释掉这些行,这将适用于多个文件,其中该部分可能位于文件中的任何位置。我假设我可以 grep on'case $- in'然后注释掉该行以及esac之后的第一个实例的所有行'case $- in'。
我怎样才能做到这一点?
如果我正确理解问题,那么您可以使用sed范围地址来注释掉该区域:
$ sed '/case $- in/,/esac/ s/^/# /' <<\TEXT
dog
dogcatmoose
case $- in
*i*);;
*) return;;
esac
catmoose
case
esac
dog cat
esac
TEXT
Run Code Online (Sandbox Code Playgroud)
输出:
dog
dogcatmoose
# case $- in
# *i*);;
# *) return;;
# esac
catmoose
case
esac
dog cat
esac
Run Code Online (Sandbox Code Playgroud)
当然,您也可以就地完成:
dog
dogcatmoose
# case $- in
# *i*);;
# *) return;;
# esac
catmoose
case
esac
dog cat
esac
Run Code Online (Sandbox Code Playgroud)