sed命令以交换一行中的元素

时间:2018-08-15 15:43:23

标签: sed

我正在尝试交换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 ...',因为我只想修改文件的第二行。

1 个答案:

答案 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