在Bash中向映射添加条目
在Bash中向映射添加条目
我有一个(Nginx)配置文件,类似于:\ntypes {\n text/html html htm shtml;\n text/css css;\n text/xml xml;\n}\n
\n我想在文件中的任何位置添加一个条目,例如:\n
types { text/html html htm shtml; text/css css; text/xml xml; image/gif gif; }
\n我尝试使用sed,如这个帖子中所示:\n
sed -i "\$i hello" mimes.types sed: 1: "mimes.types": invalid command code m
\n我在MacOS上使用fish进行测试,但在bash上也遇到了相同的错误。\n在这里我应该使用哪个命令?\n非常感谢!
问题的原因是需要在一个文件中的特定位置添加一行内容,具体要求是在所有只包含}
和可选空白字符的行之前插入一行hello
。
解决方法是使用Perl的命令行工具来实现。具体的命令是:perl -p -i -l -e 'print "hello" if /^\s*}\s*$/' mimes.types
。该命令会将mimes.types
文件中的每一行都读入并执行Perl代码,然后将结果输出到文件中。代码中的正则表达式^\s*}\s*$
用于匹配只包含}
和可选空白字符的行,如果匹配成功,则输出hello
。
但是,上述方法存在一个限制,即如果文件中有多个}
行,则会插入多个hello
行。为了解决这个问题,可以使用下面的命令:perl -p -i -l -e 'print("hello"), $done=1 if /^\s*}\s*$/ && !$done' mimes.types
。在这个命令中,通过添加判断条件&& !$done
来确保只输出一次hello
,即使有多个}
行存在。变量$done
用于记录是否已经输出过hello
。
以上是使用Perl解决问题的方法和解释。感谢提问者的回复,表示该方法完美解决了问题,但是提问者想要确认是否可以在自己的情况中使用Perl。