我有一个带依赖项的文件。一些依赖项被注释(#)。我想取消注释该行,如果它包含子串cassandra
。
所以如果文件看起来像:
firstdependency>=2.0.7 # comment
otherdependency>=0.8.9 # another comment
#commenteddependency
#cassandra-driver>=2.1.4,!=3.6.0 # Apache-2.0
anotherdependency!=0.18.3,>=0.18.2
我想要一个只会将第四行改为
的脚本cassandra-driver>=2.1.4,!=3.6.0 # Apache-2.0
因此它应该检查一行是否包含子串cassandra
,如果是,检查该行的第一个字符是否等于#
,如果是,则删除该特定行的第一个字符 - 完成。我不知道该怎么做。救命啊!
答案 0 :(得分:2)
嗯,你知道从sed
开始,那么这只是一个正确的替换命令。
sed -e "s/^#\(.*cassandra.*\)$/\1/"
找到符合以下规则的行:
#
开头,将所有其余行(#
除外)存储在临时\1
中(\(
... \)
执行的操作)并被指示仅用后者替换这样一条线。
如果需要,可以进一步改进,例如不寻找" cassandra"在第二次出现#
之后,我认为您的示例中的结尾注释会被您添加并且不会成为问题。
示例输出:
firstdependency>=2.0.7 # comment
otherdependency>=0.8.9 # another comment
#commenteddependency
cassandra-driver>=2.1.4,!=3.6.0 # Apache-2.0
anotherdependency!=0.18.3,>=0.18.2
答案 1 :(得分:1)
简单地使用标准编辑器printf '%s\n' 'g/^#.*cassandra/s/^#/' w | ed -s file >/dev/null
:
g/^#.*cassandra/
命令#
标记以cassandra
开头且包含字符串s/^#/
的所有行,#
删除这些标记行中的前导<span ng-show="myAngApp1.value == customer.LSpanish">
。
答案 2 :(得分:1)
在awk中。如果记录以#
开头且上面有cassandra
,请删除前导#
打印所有记录:
$ awk '/^#/ && /cassandra/ { sub(/^#/,"") } 1' file
firstdependency>=2.0.7 # comment
otherdependency>=0.8.9 # another comment
#commenteddependency
cassandra-driver>=2.1.4,!=3.6.0 # Apache-2.0
anotherdependency!=0.18.3,>=0.18.2
答案 3 :(得分:0)
您的脚本应该只包含以下行:
sed -e 's/#cassandra/cassandra/' your_file
正则表达式///将一种模式替换为另一种模式,在这种情况下&#39; #cassandra&#34; by&#34; cassandra&#34;。