提前感谢您的帮助。
我有以下行可以在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服务器上执行相同的命令。
非常欢迎帮助。
问候。
安东尼奥。
答案 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上print
为printf
。