我想将文本拆分为行并打印其值,例如,更改此:
YLB; YLR; YLS (tab) 30
进入这个:
YLB (tab) 30
YLR (tab) 30
YLS (tab) 30
答案1
使用awk
awk 'BEGIN {FS="[; \t]+"; OFS="\t"} {for (i=1; i<NF; i++) print $i, $NF}'
前任。
$ echo 'YLB; YLR; YLS 30' | awk 'BEGIN {FS="[; \t]+"; OFS="\t"} {for (i=1; i<NF; i++) print $i, $NF}'
YLB 30
YLR 30
YLS 30
答案2
尝试这个
sed 's/; /\n/g' yourfile
答案3
这是使用“sed”执行此操作的一种方法:
TAB=`echo 'x' | tr 'x' '\011'`; # tab
SPC=`echo 'x' | tr 'x' '\040'`; # space
WS="[${SPC}${TAB}]"; # whitespace regex
echo "YLB; YLR; YLS ${TAB} 30" |
sed -ne "
/\n/!G
s/^\([^;]*\);${WS}*\(.*\)\(${WS}${TAB}.*\)/\1\3\2\3/
P;/\n.*\n/D
"
我们必须有 shell 变量 TAB/SPC/WS,因为 POSIX“sed”不支持 \t \s,因此这是一个穷人的实现。