我正在尝试交换apache dir.conf文件中的一些元素,如下所示:
<IfModule mod_dir.c>
DirectoryIndex index.html index.cgi index.pl index.php index.xhtml index.htm
</IfModule>
我想将index.html
交换为index.php
,这是所需的输出:
<IfModule mod_dir.c>
DirectoryIndex index.php index.html index.cgi index.pl index.xhtml index.htm
</IfModule>
这是我到目前为止的命令,但是我敢肯定有一种更简洁的编写方法:
sed -e '2s/\(.*\)\s\(.*\)\s\(.*\)\s\(.*\)\s\(.*\)\s\(.*\)\s\(.*\)\s\(.*\)/\1 \2 \6 \3 \4 \5 \7 \8/'
btw我离开了'2s ...',因为我只想修改文件的第二行。
答案 0 :(得分:1)
抢救Perl!
<?xml version="1.0" encoding="UTF-8"?>
<server description="new server">
<featureManager>
<feature>javaee-8.0</feature>
</featureManager>
<quickStartSecurity userName="admin" userPassword="adminpwd" />
<httpEndpoint id="defaultHttpEndpoint" httpPort="9080" httpsPort="9443" />
<applicationManager autoExpand="true" />
<applicationMonitor updateTrigger="mbean" />
<dataSource id="DefaultDataSource">
<jdbcDriver libraryRef="MyJDBCLib" />
<properties.derby.embedded databaseName="myDB" createDatabase="create" />
<containerAuthData user="user1" password="{xor}Oz0vKDtu" />
</dataSource>
<library id="MyJDBCLib">
<file name="/Users/Philip/Tools/openliberty/wlp-18.0.0.2/lib/derby.jar" />
</library>
</server>
perl -pe 's/index\.(?:(php)|(html))/$1 ? "index.html" : "index.php"/ge if 2 == $.'
使/e
运算符的替换部分像代码一样工作,因此对s///
进行了真实性测试,如果是真实的,则有$1
,因此我们将其替换为php
,否则将有html
,因此我们将其替换为html
。