sed在AIX上无法识别-r标志

时间:2014-05-22 15:32:21

标签: sed aix

提前感谢您的帮助。

我有以下行可以在linux上运行。

myfile(extract)

active_instance_count=
aq_tm_processes=1
archive_lag_target=0
audit_file_dest=?/rdbms/audit
audit_sys_operations=FALSE
audit_trail=NONE
background_core_dump=partial
background_dump_dest=/home1/oracle/app/oracle/admin/iopecom/bdump
...
cat myfile |sed -r 's/ {1,}//g'|sed -r 's/\t*//g' |grep -v "^#"|sed -s "/^$/d" |sed =|sed 'N;s/\n/\t/'|sed -r "s/#.*//g" | sed "s/\t/;/g"|sed "s/\t/;/g"|sed -e "s,',\o042,g"

结果将是:

1;O7_DICTIONARY_ACCESSIBILITY=TRUE
2;active_instance_count=
3;aq_tm_processes=1
4;archive_lag_target=0
5;audit_file_dest=?/rdbms/audit
6;audit_sys_operations=FALSE
7;audit_trail=NONE
8;background_core_dump=partial
9;background_dump_dest=/home1/oracle/app/oracle/admin/iopecom/bdump

但是,我无法弄清楚,如何在AIX服务器上执行相同的命令。

非常欢迎帮助。

问候。

安东尼奥。

2 个答案:

答案 0 :(得分:1)

除非您有令人信服的理由使用sed,否则您可以使用其他工具:

awk -v OFS=';' '{print NR,$0}' filename

会产生所需的输出。

您也可以使用perl

perl -ne 'print "$.;$_"' filename

您的sed表达式似乎会跳过以#开头的行。因此,您可以说:

perl -ne '$,=";"; !/^#/ && print ++$i,$_' filename

或类似的东西:

grep -v '^#' filename | awk ...

答案 1 :(得分:1)

重新格式化您的管道:

cat myfile |
        sed -r 's/ {1,}//g'   | # strip all spaces                     (1)
        sed -r 's/\t*//g'     | # strip all tabs                       (2)
        grep -v "^#"          | # delete all lines beginning `#`       (3)
        sed -s "/^$/d"        | # delete all empty lines               (4)
        sed =                 | # interleave with line numbers         (5)
        sed 'N;s/\n/\t/'      | # join line number and line with `\t`  (6)
        sed -r "s/#.*//g"     | # strip all `#` comments               (7)
        sed "s/\t/;/g"        | # replace all tabs with `;`            (8)
        sed "s/\t/;/g"        | # do it again                          (9)
        sed -e "s,',\o042,g"    # replace all ' with "                (10)

将其缩小并使用cat -n预先提供行号得到:

cat -n myfile                  |
    sed "$(print 's/\t/;/')
         $(print 's/[ \t]*//g')
         s/#.*//g
         /^$/d
         s/'/\"/g"

除非我误读了aix文档,否则行为相同。 $(...)构造是命令替换,它运行该命令并替换其输出。 Linux上printprintf