【发布时间】:2019-09-20 12:14:34
【问题描述】:
我有一个文件,其中行开始:
OCCUPY 12 EVERY PIC 32(12). SUNNY
OCCUPY 45 EVERY PIC X(21). SUNNY
有些行可以分成两行:
1 OCCUPY 12 EVERY PIC 32(12). SUNNY
2 OCCUPY 45 EVERY SUNNY
3 PIC X(21). SUNNY
所需的输出是:
PIC 32(12) OCCUPY 12 EVERY. SUNNY
PIC X(21) OCCUPY 45 EVERY. SUNNY
所以,我需要将分隔的行合并为一行并交换单词。 所以,对于那些在一行中的,我正在使用命令:
sed 's/\(OCCUPY.*EVERY\) *\(PIC *[^ }*\)\./\2 \1./'
sed -Ez 's/(OCCUPY)\s+([0-9]+)\s+(EVERY)\s+(PIC)\s+([^)]+\))/\4 \5 \1 \2 \3/g'
这些命令有效,但前提是该行在一行中,并且它移动单词 SUNNY 并且点在一个空格之外。 SUNNY 这个词必须在同一个字段中。所以,错误的输出是:
PIC 32(12) OCCUPY 12 EVERY. SUNNY
PIC X(21) OCCUPY 45 EVERY . SUNNY
任何帮助将不胜感激!
【问题讨论】:
-
perl -pe 'unless (/\.\s*\z/) { $_ .= readline; redo } s/^OCCUPY\s+(\S+)\s+EVERY\s+(\S.*)\./$2 OCCUPY $1 EVERY./'? -
您没有使用您所说的 sed 命令,因为它包含语法错误。